On 01/12/2014 10:04 AM, Keith Winston wrote:
I've got this line:

for k in range(len(tcombo)):
     tcombo_ep.append(list(combinations(tcombo, k+1)))

generating every possible length combination of tcombo. I then test
them, and throw most of them away. I need to do this differently, it
gets way too big (crashes my computer).

I'm going to play some more, but I think I need to test the
combinations as they're generated... and then only add them to a list
(probably better: a set) if they meet a requirement (something like
sum(specific.combination(tcombo) == goal)) AND if they are not already
part of that list (the uniqueness issue is why a set might be better)

I'm partially asking in order to clarify the question in my mind, but
any help will be appreciated. I don't really understand lambda
functions yet, but I can sort of imagine they might work here
somehow... or not.

You say yourself that, on the application side, the semantics are that relevant items (individual combinations) are a subset of the ones otherwise produced, right? Thus they are conceptually the output of a *filter*. Whether they are stored (in a list --> list comprehension) or directly processed (from a generator --> generator expression), you should only ever deal with the relevant ones.

      production                filter
data     --->     combinations   --->   [storage] usage

If the filter's criterion is 'crit':
        combs = (comb for comb in combinations(tcombo, k+1)) if crit(comb))

This, in addition to the requirement of uniqueness which as you say is probably best met using a set (after filter). This may lead to you chosing to store, even if otherwise not truely necessary. An question is: what kind of data are combinations, and how do you compare them? If there is a possibly cheap shortcut by comparing only a little bit of combination data, then you may make a set of those little bits only and avoid storing the whole of combinations.

Denis
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to