【发布时间】:2018-01-04 11:43:46
【问题描述】:
我找到了列出所有可能的 n 元素组合的方法,这些元素组合在 k 个元素的集合中。从数学上看,数字很简单:n!/(k!* (n-k)!) 并且 python 代码使用 itertools 非常简单:
>>> import itertools
>>> a = [1,2,3,4]
>>> list(itertools.combinations(a,3))
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
但是如何实现这样的限制:只列出只有 m 个共同元素的组?所以在前面的例子中,对于 m=1,结果应该是:
[(1, 2, 3)]
有 5 个元素且 m=1:
>>> b=[1,2,3,4,5]
>>> list(itertools.combinations(b,3))
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
所以我的结果是:
[(1, 2, 3), (1, 4, 5)]
这个问题的实际应用是如何对人进行分组,考虑到只有 m 人可以在结果组中重复。想法是找到有不同人的群体,避免成群结队的“朋友”。想象一下这样的学校活动,重复了几天,我们希望确保尽可能避免人们与其他人重复。
【问题讨论】:
-
示例中的所有元组至少有两个不同的元素。
-
抱歉,我实在忍不住了,@KlausD。
-
@joanba 不同的元素相对于什么?第一个元组?
-
你改写了,但没有更清楚。
-
你回答得这么快,只是编辑帖子更容易理解
标签: python combinations itertools