[Python-Dev] Additional behaviour for itertools.combinations (original) (raw)
Steven D'Aprano steve at pearwood.info
Sun Jan 25 11:49:43 CET 2009
- Previous message: [Python-Dev] Additional behaviour for itertools.combinations
- Next message: [Python-Dev] ac_sys_system == Monterey*?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sun, 25 Jan 2009 02:33:37 pm Raymond Hettinger wrote:
> Raymond Hettinger wrote: >> Since I expect students to be among the users for the comb/perm >> functions, there is some merit to keeping the API as simple as >> possible. Besides, it is not hard to use the existing tool as a >> primitive to get to the one you want: >> >> def mycombinations(iterable, rseq): >> # mycombinations('abc', [1,2]) --> A B C AB AC BC >> iterable = list(iterable) >> return chain.fromiterable(imap(combinations, >> repeat(iterable), rseq))
[Nick Coglan] > Perhaps a reasonable starting point would be to include this as one > of the example itertools recipes in the documentation? I would have suggested that but recipe itself is use case challenged. The OP did not mention any compelling use cases or motivations. Essentially, he just pointed-out that it is possible, not that it is desirable. I can't the of a case where I've wanted to loop over variable length subsequences. Having for-loops with tuple unpacking won't work because the combos have more than one possible size. This seems like a hypergeneralization to me.
Does answering homework questions count as a use-case?
http://mathforum.org/library/drmath/view/56121.html
Also calculating the odds of winning Powerball:
http://mathforum.org/library/drmath/view/56122.html
The number of combinations taken (1, 2, 3, ..., n) at a time is closely related to the Bell Numbers. And according to Wikipedia, the oldest known reference to combinatrics included such a question.
http://en.wikipedia.org/wiki/History_of_combinatorics
Having said all that, I'm inclined to agree that this is an over-generalisation. As far as I can tell, there's no name for this in mathematics, which suggests that useful applications and theorems are both rare.
In any case, it's not that difficult to create a generator to yield all the combinations:
(comb for k in ks for comb in itertools.combinations(seq, k))
I'm with Nick that this would make a good example for the documentation. I don't object to combinations growing the extra functionality, but if it does, people will ask why permutations doesn't as well.
-- Steven D'Aprano
- Previous message: [Python-Dev] Additional behaviour for itertools.combinations
- Next message: [Python-Dev] ac_sys_system == Monterey*?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]