擅长:python、mysql、java
<p>可以使用递归生成器函数:</p>
<pre><code>lst = [['a'],['b'],['c'],['d'],['e'],['f'],['g'],['h']]
x = 3
def combos(lst, n, c = []):
if sum(map(len, c)) == (l:=len(lst))-(l%x):
yield c
else:
for i in filter(lambda x:not any(x in i for i in c), lst):
if not c or len(c[-1]) == n:
yield from combos(lst, n, c+[[i]])
else:
yield from combos(lst, n, [*c[:-1], c[-1]+[i]])
result = list(combos(lst, x))
print(result[:10])
</code></pre>
<p>输出:</p>
<pre><code>[[['a'], ['b'], ['c']], [['d'], ['e'], ['f']]]
[[['a'], ['b'], ['c']], [['d'], ['e'], ['g']]]
[[['a'], ['b'], ['c']], [['d'], ['e'], ['h']]]
[[['a'], ['b'], ['c']], [['d'], ['f'], ['e']]]
[[['a'], ['b'], ['c']], [['d'], ['f'], ['g']]]
[[['a'], ['b'], ['c']], [['d'], ['f'], ['h']]]
[[['a'], ['b'], ['c']], [['d'], ['g'], ['e']]]
[[['a'], ['b'], ['c']], [['d'], ['g'], ['f']]]
[[['a'], ['b'], ['c']], [['d'], ['g'], ['h']]]
[[['a'], ['b'], ['c']], [['d'], ['h'], ['e']]]
...
</code></pre>