multinomial combinations

Dr. Phillip M. Feldman Phillip.M.Feldman at
Sat Sep 24 03:06:01 EDT 2011

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]:
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

def multinomial_combinations(items, ns):

   if len(ns) == 1:
      for c in itertools.combinations(items, ns[0]):
         yield c

      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
View this message in context:
Sent from the Python - python-list mailing list archive at

More information about the Python-list mailing list