有趣的答案,请允许我修改问题。
在对代码进行一些更改后,我得到了这个:
#coding:utf-8
import itertools
stuff = [1, 2, 3, 4, 5, 8, 10, 13, 16, 17, 18, 20, 21, 22, 25]
for L in range(5, 6):
for subset in itertools.combinations(stuff, L):
subset = list(subset)
subset.extend([7, 9, 11, 15, 19, 23, 6, 12, 14, 24])
print(subset)
它的输出是这样的:
[1, 2, 3, 4, 5, 7, 9, 11, 15, 19, 23, 6, 12, 14, 24]
[1, 2, 3, 4, 8, 7, 9, 11, 15, 19, 23, 6, 12, 14, 24]
...
它产生大约3000行。
它完成了五个列表内容的所有可能组合,并将每个组合(子集)添加到另一个列表中(subset.extend([7,9,11,15,19,23,6,12,14] ,24]))。这似乎是对的,我不确定。
但我真正希望它做的是:
1 - 输入三个列表(配对和非配对)
stuff = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
pair = [2 , 6, 12, 20, 16, 10, 22]
unpair = [1, 5, 11, 19, 23, 25, 13, 17]
2 - 比程序将生成7个数字对中的4个数字的所有组合,并且将对unpair执行相同的操作,从8个非配对数生成4个数字的所有组合,并将它们绑定在一起生成列表8对可能的4个数字组合,4个数字来自unpair,如:
[2, 12, 20, 10, 1, 5, 19, 23]
[2, 12, 20, 10, 5, 19, 25, 13]
...
3 - 对于生成的对和非对的组合中的每一行,它将使用列表中的7个数字组合来生成具有15个数字的列表,而不重复像
这样的数字[2, 12, 20, 10, 1, 5, 19, 23, 25, 3, 4, 8, 17, 21, 22]
[2, 12, 20, 10, 5, 19, 25, 13, 3, 4, 8, 17, 21, 22, 11]
...
这是我被卡住的地方。如何为每个列表生成组合并绑定它们,生成15个数字列表,而不重复数字和序列。
答案 0 :(得分:0)
您只需在for循环中手动编写该逻辑:
for combo in itertools.combinations(stuff, 15):
if set(combo).issuperset(pair) and set(combo).issuperset(unpair):
print(combo)
注意:此特定代码仅适用于" stuff"没有重复