2014-08-29 80 views
1

有趣的答案,让我来修改这个问题。基于三个列表生成所有可能的元组

在代码中的一些变化后,我得到这个:

#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个数字的unpair生成4个数字的所有组合,并将它们绑定在一起,生成一个列表,其中8个数字可能包含4个数字组合,其中4个数字组合来自未配对的4个数字如:

[2, 12, 20, 10, 1, 5, 19, 23] 
[2, 12, 20, 10, 5, 19, 25, 13] 
... 

3 - 比从对和解除配对的组合中的每个线中产生将与从所述列表中的东西产生与15个数字的列表的7个数字的组合完成,而不必重复若干像

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

+3

这不是完全清楚你的意思这个特殊的代码才有效。你能举一些例子输出吗? – 2014-08-29 00:14:08

+1

这是一个非常神秘的问题,你真的需要添加你考虑的输入和你的预期输出 – 2014-08-29 01:36:12

回答

0

你可以手动在代码中的逻辑您的for循环:

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

注:当“东西”有没有重复

相关问题