列出可迭代的每个排列

时间:2017-06-03 03:06:08

标签: python permutation

from itertools import permutations
l = [0, 1, 2, 3, 4]
x = permutations (l, 3)

我得到以下内容:

(0, 1, 2) , (0, 1, 3), ...., (0, 2, 1), (0, 2, 3), (0,2,4),...., (4, 3, 0), (4, 3, 1),
(4, 3, 2)

这是预期的。 但我需要的是:

(0, 0, 0), (0, 0, 1), ...., (0, 0, 4), (0, 1, 0), (0, 1, 1)........

如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

您需要的是具有替换或产品的排列,但itertool permutations会产生无替换的排列。您可以自己计算产品:

[(x,y,z) for x in l for y in l for z in l]
#[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0), ...

或者使用itertools中的同名功能:

list(itertools.product(l,repeat=3))
# [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 0),...

后一种方法更有效。

答案 1 :(得分:1)

您需要使用来自product模块的permutations,而不是使用itertools,例如:

from itertools import product

l = [0, 1, 2, 3, 4]
# Or:
# b = list(product(l, repeat=3))
b = list(product(l,l,l))
print(b)

输出:

[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), ..., (4, 4, 1), (4, 4, 2), (4, 4, 3), (4, 4, 4)]

答案 2 :(得分:0)

您需要产品而不是排列

from itertools import product
l = [0, 1, 2, 3, 4]
b = list(product(l, repeat=3))