根据三个列表生成所有可能的元组

时间:2014-08-29 00:04:51

标签: python list python-2.7 combinations itertools

有趣的答案,请允许我修改问题。

在对代码进行一些更改后,我得到了这个:

#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个数字列表,而不重复数字和序列。

1 个答案:

答案 0 :(得分:0)

您只需在for循环中手动编写该逻辑:

for combo in itertools.combinations(stuff, 15):
    if set(combo).issuperset(pair) and set(combo).issuperset(unpair):
        print(combo)

注意:此特定代码仅适用于" stuff"没有重复