On Sat, Sep 24, 2011 at 12:06 AM, Dr. Phillip M. Feldman <phillip.m.feld...@gmail.com> wrote: > > I wrote a small generator function that produces multinomial combinations. > (Python's itertools module does ordinary combinations, but not multinomial > combinations). The code essentially works, except that the the last > combination in each tuple is not enclosed in a nested tuple: > > In [2]: x= multinomial_combinations(range(7),[2,1,2]) > > In [3]: x.next() > Out[3]: ((0, 1), (2,), 3, 4) > > (The 3 and 4 should be enclosed in a nested tuple). > > Any suggestions as to what I'm doing wrong will be appreciated. My code > follows: > > def multinomial_combinations(items, ns): > > if len(ns) == 1: > for c in itertools.combinations(items, ns[0]): > yield c
FWIW, changing the base case to: if not ns: yield () appears to fix the issue. (Disclaimer: Have not done additional testing.) Cheers, Chris > else: > for c_first in itertools.combinations(items, ns[0]): > items_remaining= set(items) - set(c_first) > for c_other in multinomial_combinations(items_remaining, ns[1:]): > yield (c_first,) + c_other -- http://mail.python.org/mailman/listinfo/python-list