繁体   English   中英

用于递归生成所有唯一排列的代码?

[英]Code for generating all unique permutations recursively?

假设我有一个列表L=[1,2,3,3,4] ,我希望递归地找到长度为3的所有排列。

我试图返回所有独特的排列,这意味着类似[1,2,3]东西不包含在输出中两次,因为L有两个3

我问因为itertools.permutations包含重复项,我也试图按顺序迭代排列(从最低[1,2,3][4,3,3]迭代)因为我希望能够每当我需要时就退出迭代。

如果我没有正确解释,我很抱歉。

编辑:我应该再说一遍。 在实践中,我不想实际生成每一个可能的排列(会有太多的排列),尽管代码可以运行完成。 我试图以特定顺序迭代所有排列,以便我可以在必要时提前保释。

这个怎么样:

l = [1,2,3,3,4]

print sorted(set(itertools.permutations(l,3)))

输出:

[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 3), (1, 3, 4), ..., (4, 3, 3)]

这使它保持有序并删除重复。


如果你想避免事先产生每个可能的排列,我会做这样的事情:

gen = itertools.permutations(l,3)
s = set()

for i in gen:
    if i not in s:
        print i  # or do anything else
    # if some_cond: break
    s.add(i)

这里gen是一个生成器 ,因此您不会预先创建可能使用的所有元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM