2014-08-29 86 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) 

注:當「東西」有沒有重複

相關問題