multinomial combinations

Arnaud Delobelle arnodel at gmail.com
Sat Sep 24 03:43:17 EDT 2011


(sorry about the top posting)

Change yield c to yield (c,)

HTH

Arnaud

PS: you could also change the if ... To

If not ns:
    Yield ((),)
Else:
    ...
On Sep 24, 2011 8:06 AM, "Dr. Phillip M. Feldman" <
Phillip.M.Feldman at 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
>
> 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
> --
> View this message in context:
http://old.nabble.com/multinomial-combinations-tp32503896p32503896.html
> Sent from the Python - python-list mailing list archive at Nabble.com.
>
> --
> http://mail.python.org/mailman/listinfo/python-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20110924/2ff6529a/attachment-0001.html>


More information about the Python-list mailing list