擅长:python、mysql、java
<p>您可以使用递归函数,从列表中获取<code>k</code>元素的所有组合,并将它们与其余元素的组合组合</p>
<pre><code>import itertools
def combs(lst, k, l):
if l == 0:
yield []
else:
for c in itertools.combinations(lst, k):
rest = [x for x in lst if x not in c]
for res in combs(rest, k, l-1):
yield [c, *res]
mylist = [0, 1, 2, 3, 4, 5, 6, 7]
for res in combs(mylist, 4, 2):
print(res)
</code></pre>
<p>这里,只有当列表中的元素是唯一的时,部分<code>rest = [x for x in lst if x not in c]</code>才会起作用。如果可能存在重复的元素,您可以只获取索引的组合,例如,如下所示(其余部分保持不变):</p>
<pre><code> for idc in itertools.combinations(range(len(lst)), k):
comb = [lst[i] for i in idc]
idc_set = set(idc)
rest = [x for i, x in enumerate(lst) if i not in idc_set]
for res in combs(rest, k, l-1):
yield [comb, *res]
</code></pre>
<p>(同样,这假设<code>lst</code>至少有<code>l*k</code>个元素。)</p>