python - 不重复python的排列

标签 python list python-2.7 permutation

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/

相关文章:

python - 如何根据特定要求比较两个列表?

Python:如何按一列对行进行分组并按另一列选择一行?

python - 如何将包含键的列表和另一个列表作为值写入 Python 中每列的 CSV 文件

python-2.7 - 无法在jupyter/python2.7.5中使用line_profiler

django - Django Ckeditor 的 Youtube 插件已更新

python - 查找并替换字符串中混淆的单词或短语

python - python azure函数中的错误404 HEAD依赖性

c - "temp=*q"和 "temp->link=*q"之间的区别

android - 列出将 >10 个改造调用与 rxjava2 组合在一起的子类型转换

python - 将值附加到列表并添加到字典