combinations of variable length nested lists

Just van Rossum just at
Tue Aug 7 19:53:24 CEST 2001

Mark Robinson wrote:
> ok, thats a bit more eligant (and efficient) than my attempt in my reply
> to Hans :). You really think that can be written in "far fewer lines"?
> thanks alot
> blobby
> I have no idea whether a list
>  > comprehension in place of the second (double)
>  > loop would be faster, because they have sometimes
>  > turned out to be slower in places where you'd
>  > think they'd be faster.)
> What is a list comprehension, just out of interest :), I am always
> looking to reduce my ignorance.

This one uses list comprehensions (it's based on David Ullrich's version):

input = [[1, 2], [4, 5, 6], [8, 9]]

def perm(alist):
    if len(alist) < 2:
        return [[item] for item in alist[0]]
    tails = perm(alist[1:])
    return [[item] + p for item in alist[0] for p in tails]

for x in perm(input):
    print x


More information about the Python-list mailing list