[Tutor] Permutations?
Tim Peters
tim.peters at gmail.com
Sun Jul 25 19:34:05 CEST 2004
[Hee-Seng Kye, playing with permutations]
> ...
> p.s. By the way, does anyone have any idea if it would drive my
> computer (667 MHz and 512MB RAM) nuts to perm(range(12))?
Yes, that can't work. There are n! permutations of a collection with
n elements, and 12! = 479001600. You'll run out of memory long before
materializing a list of nearly half a billion 12-element lists.
You can use generators, though, to produce the permutations one at a
time. The memory burden is trivial then, although it will still take
a long time to generate half a billion results.
For example,
def perm(k):
if k:
for i, ith in enumerate(k):
for x in perm(k[:i] + k[i+1:]):
x.insert(0, ith)
yield x
else:
yield []
>>> for p in perm([1, 2, 3]):
... print p
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
>>>
More information about the Tutor
mailing list