> Or on systems with list comps try: > >>>> V='abc' >>>> ['%s%s'%(ii,jj) for ii in V for jj in V] > ['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc'] >>>>
Yeah, except that the length here is hard-coded. There's no way (as far as I can tell, at least), to make this generic with respect to list length. Thanks for the itertools suggestion, guys. I was hoping to improve my list-comprehension-fu, but that module was the next best thing. David On Mon, Jul 13, 2009 at 1:58 PM, Emile van Sebille<em...@fenx.com> wrote: > On 7/13/2009 9:33 AM Tim Chase said... >>> >>> For example: if my values are ['a', 'b', 'c'], then all possible lists >>> of length 2 would be: aa, ab, ac, ba, bb, bc, ca, cb, cc. >>> >>> I created a recursive program to do it, but I was wondering if there >>> was a better way of doing it (possibly with list comprehensions). >>> >>> Here's my recursive version: >>> >>> vals = ['a', 'b', 'c'] >>> >>> def foo(length): >>> if length <=0: >>> return [] >>> if length == 1: >>> return [[x] for x in vals] >>> else: >>> return [x + [y] for x in foo(length - 1) for y in vals] >> >> Sounds like you want one of the combinitoric generators found in >> itertools[1] -- in this case, the itertools.product() does what you >> describe. According to the docs, it was added in 2.6 so if you're running >> an older version, you'd have to back-port it > > > Emile > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list