说我有一个列表L=[1,2,3,3,4]
,我希望以递归方式找到长度为3的所有排列。
我正在尝试返回所有唯一排列,这意味着[1,2,3]
之类的内容未包含在输出中两次,因为3
中有两个L
。
我问因为itertools.permutations包含重复项,而且我也尝试按顺序迭代排列(从最低[1,2,3]
迭代到[4,3,3]
)因为我希望能够退出每当我需要时迭代。
如果我没有正确解释,我很抱歉。
编辑:我应该再详细说明一下。在实践中,我不想实际生成每一个可能的排列(会有太多的排列),尽管代码可以运行完成。我试图以特定顺序迭代所有排列,以便我可以在必要时提前保释。
答案 0 :(得分: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
是生成器,因此您不会预先创建可能使用的所有元素。