Skip to main content
 首页 » 编程设计

python之不重复python的排列

2025年05月04日12qlqwjy

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')] 
>>>