【发布时间】:2017-06-01 11:56:20
【问题描述】:
我正在尝试使用 itertools.combinations 返回唯一的组合。我搜索了几个类似的问题,但都没有找到答案。
一个例子:
>>> import itertools
>>> e = ['r','g','b','g']
>>> list(itertools.combinations(e,3))
[('r', 'g', 'b'), ('r', 'g', 'g'), ('r', 'b', 'g'), ('g', 'b', 'g')]
出于我的目的,(r,g,b) 与 (r,b,g) 相同,因此我只想返回 (rgb)、(rgg) 和 (gbg)。
这只是一个说明性示例,我想忽略所有此类“重复”。列表 e 最多可以包含 5 个元素。每个单独的元素可以是 r、g 或 b。一直在寻找来自 e 的 3 个元素的组合。
具体来说,以下是我希望称之为“有效”的唯一组合:(rrr)、(ggg)、(bbb)、(rgb)。
所以也许问题归结为如何将 (rgb) 的任何变化视为等于 (rgb) 并因此忽略它。
我可以使用itertools 来实现这一点,还是我需要编写自己的代码来将“重复项”删除?如果没有 itertools 解决方案,那么我可以很容易地检查每个是否都是 (rgb) 的变体,但这感觉有点“非 Python 式”。
【问题讨论】:
-
那么,为什么不从四个有效输出中选择一个呢?
-
对不起,如果不清楚,但我想返回所有有效的组合,但我认为问题中提到的“有效”。
-
那么
rrbrrg等呢?另外,如果您确定您唯一有效的输出是rrr、ggg、bbb和rgb,那么只需输出它们,就没有什么可计算的了? -
See this question. 将
r、g和b视为容量与其计数相等的箱。然后,在接受的答案中应用算法。
标签: python combinations itertools