【发布时间】:2017-08-11 22:35:17
【问题描述】:
在 Python 中;在给定可能成员g的列表的情况下,获取kn成员组和lm成员组组合列表的最佳方法是什么?
示例,给定一个元素列表:
g = ["A", "B", "C", "D", "E", "F", "G"]
我想要的是列出所有组合的li,例如2(=k) 组 2(=n) 和 1(=l) 组 3(=m):
[["AB", "CD", "EFG"],
["AC", "BD", "EFG"],
["AD", "CB", "EFG"],
["AE", "CD", "BFG"],
["AF", "CD", "BEG"],... ]
-
我不希望在任何组中重复任何元素(相当于说:我希望每个不同的元素在所有组中针对每个不同的组合出现一次)。
例如
["AB", "AD", "EFG"]不是一个有效的组合,因为它在所有组中多次包含元素A。 -
我不希望组内有不同的排列;
例如
["AB", "CD", "EFG"]不应以["BA", "DC", "EGF"]之类的形式重复。 -
另外,如果一个组合出现在任何
k-groups中,如果l-groups相同(l-groups相同),我不希望 k 组中出现相同的组合。例如如果
["AB", "CD", "EFG"]出现,[ "CD", "AB", "EFG"]不应再次出现。
需要明确的是,我只对组总是整齐/完全适合要使用的整个元素组的情况感兴趣(g):
例如
2x2 + 1x3 == 7 == len(["A", "B", "C", "D", "E", "F", "G"]),1x2 + 1x3 == 5 == len(["A", "B", "C", "D", "E"]).
我可以使用 Python's permutations function 并在每个排列中将 k 分组到 n 和 l 分组 m 中,但是对于更多元素,我会有很多不必要的迭代。
【问题讨论】:
-
你能在一个字符串中复制元素吗?例如,拥有
["AB", "BC", "EFE"]是否合法? -
不。任何元素都不能在另一个子组中重复。
-
修复您的帖子?您已经在某些示例中重复了 B 和 C,例如
["AB", "BC", "EFG"] -
鉴于您的澄清,我发布的答案是错误的:它会跨组发出重复项。这个问题并不像最初出现的那么简单:每个组都必须是词典中的组合,并且您需要组的所有互斥排列。跨度>
-
你想要
["AB", "CD", "EFG"]和["CD", "AB", "EFG"]还是只想要其中一个?
标签: python algorithm python-2.7 combinations