1

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

我正在尝试返回所有唯一的排列,这意味着[1,2,3]输出中没有两次包含类似3的东西,因为L.

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

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

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

4

1 回答 1

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是一个生成器,因此您不会预先创建所有可能使用的元素。

于 2012-11-15T23:47:22.380 回答