3

例如,我想获取一个列表List = [1,2,2]并生成它的排列。我可以这样做:

NewList = [list(itertools.permutations(List))]

输出是:

[[(1, 2, 2), (1, 2, 2), (2, 1, 2), (2, 2, 1), (2, 1, 2), (2, 2, 1)]]

问题:itertools.permutations返回一个长度为 1 的列表,其唯一条目是 List 的所有排列的列表。那是:

NewList[0] == [(1,2,2),(1,2,2),(2,1,2),(2,2,1),(2,1,2),(2,2,1)]

NewList[1]不存在。

我希望输出是一个列表,其中每个条目都是排列之一。那是

NewList[0] == (1,2,2)
NewList[1] == (1,2,2)
NewList[2] == (2,1,2)
...
NewList[5] == (2,2,1)

问题:是否有一个命令会以这种方式产生 List 的排列?如果做不到这一点,有没有办法访问“个人元素”,[list(itertools.permutations(List))]这样我就可以用它们做事了?

4

2 回答 2

4
>>> from itertools import permutations
>>> list(permutations([1,2,2]))
[(1, 2, 2), (1, 2, 2), (2, 1, 2), (2, 2, 1), (2, 1, 2), (2, 2, 1)]

您无需再次将其放入列表中。即不要这样做[list(permutations(...))](通过这样做[],您正在制作一个嵌套列表,因此无法使用 访问元素testList[index],尽管您可以这样做,testList[0][index]但最好将其保留为元组列表。)

>>> newList = list(permutations([1, 2, 2]))
>>> newList[0]
(1, 2, 2)
>>> newList[3]
(2, 2, 1)

现在您可以使用它们的索引来访问元素。

于 2013-07-31T14:36:14.600 回答
0

为什么你不能这样做:

NewList = [list(itertools.permutations(List))][0]

甚至只是这个:

NewList = list(itertools.permutations(List))

通过这样做[ list(itertools.permutations(List)) ],您将排列列表(您想要的排列)放入另一个列表中。所以解决方法是删除外部[]

于 2013-07-31T14:36:22.450 回答