【发布时间】:2012-11-04 16:24:54
【问题描述】:
假设我有一个列表L=[1,2,3,3,4],我想递归地找到所有长度为 3 的排列。
我正在尝试返回所有唯一的排列,这意味着像 [1,2,3] 这样的东西不会两次包含在输出中,因为在 L 中有两个 3。
我问是因为 itertools.permutations 包含重复项,而且我试图按顺序迭代排列(从最低的 [1,2,3] 迭代到 [4,3,3]),因为我希望能够在需要时退出迭代到。
如果我没有正确解释事情,我很抱歉。
编辑:我可能应该再次详细说明。在实践中,我不想实际生成每一个可能的排列(会有太多的排列),尽管代码可以运行完成。我正在尝试以特定顺序遍历所有排列,以便在必要时可以提前退出。
【问题讨论】:
-
您想避免重复
[1, 2, 3],但您还想在输出中包含[4, 3, 3]?也许这是可能的,但对我来说似乎不一致...... -
@senderle Well [1,2,3] 可能与另一个 [1,2,3] 重复。 [4,3,3] 本身仍然是一个有效的排列。
-
是的,但在一种情况下,您将
3s 视为相同,而在另一种情况下,您将它们视为不同。做一个事后过滤器并不难,但我很难看到你如何only 生成你想要的值。您如何判断何时将3s 视为相同,何时将它们视为不同?同样,也许这是可能的,但我不确定好处是否超过了复杂性的增加。
标签: python permutation