Python 中是否有一种方法可以生成列表的所有排列,而无需获得同一列表的两个副本(由于列表中的元素相同)。
例如,列表 ["up","up"] 应该只生成列表 ["up","up"] 而不是两次。
另一个例子是 ["up", "up", "right"] 只返回:
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
而不是以下内容:
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
例如,这个脚本没有给出所需的列表。
>>> import itertools
>>> a = list(itertools.permutations(["up","up","down"]))
>>> print a
[('up', 'up', 'down'), ('up', 'down', 'up'), ('up', 'up', 'down'), ('up', 'down', 'up'), ('down', 'up', 'up'), ('down', 'up', 'up')]
注意:如何使用大小为 20 或更大的更大列表来加快速度?
最佳答案
你可以这样做
print list(set(a))
演示:
>>> import itertools
>>> a = list(itertools.permutations(["up","up","down"]))
>>> a
[('up', 'up', 'down'), ('up', 'down', 'up'), ('up', 'up', 'down'), ('up', 'down', 'up'), ('down', 'up', 'up'), ('down', 'up', 'up')]
>>> set(a)
set([('up', 'up', 'down'), ('down', 'up', 'up'), ('up', 'down', 'up')])
>>> list(set(a))
[('up', 'up', 'down'), ('down', 'up', 'up'), ('up', 'down', 'up')]
>>>
关于python - 不重复python的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224443/