在Python中生成唯一排列[重复]

发布于 2021-01-29 15:00:50

这个问题已经在这里有了答案

具有唯一值的排列
(19个答案)

7年前关闭。

我正在寻找列表的唯一排列,x = [“ $ 5”,“ $ 10”,“ $ 10”,“ TAX”,“ $ 5”,“ 20%”,“ BOGO”,“
BOGO”,“ TAX “](9人一组)

我目前正在做的是

from itertools import permutations
x = ["$5", "$10", "$10", "TAX", "$5", "20%", "BOGO", "BOGO", "TAX"]
combos = []
for i in permutations(x, 9):
    if i not in combos:
        combos.append(i)
print combos

但是,这需要很长时间才能运行,我想知道是否有人可以为我提供更有效的解决方案。

关注者
0
被浏览
99
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    if i not in combos:这将花费很长时间,因为列表中的成员资格测试是(最坏的情况)O(N)-它必须扫描每个元素。您可以set改用:

    >>> from itertools import permutations
    >>> x = ["$5", "$10", "$10", "TAX", "$5", "20%", "BOGO", "BOGO", "TAX", "BOGO"]
    >>> %time p = set(permutations(x, 9))
    CPU times: user 0.88 s, sys: 0.01 s, total: 0.90 s
    Wall time: 0.90 s
    >>> len(p)
    75600
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看