2015-12-29 54 views
4

我試着去獲得蟒三種不同的列出所有可能的組合數學與蟒蛇幾個列表

說我有三個列表

A = [2,3,4,7,9] 
B = [2,3,5] 
C = [1,2] 

我想回到所有組合的是真實的[ 1] + B [J] -C [K] == 3

D = [[i,j,k] for i in A for j in B for k in C] 

這給了我所有的組合以列表格式,但如何從這裏下去?

回答

2

您可以使用itertools.product的列表理解來檢查每個組合以查看它是否符合您的條件。

>>> from itertools import product 
>>> [(a,b,c) for a,b,c in product(A,B,C) if a + b - c == 3] 
[(2, 2, 1), (2, 3, 2), (3, 2, 2)] 
+0

雖然我不知道,如果是OP的要求,但可能是你應該改變'(A,B,C) '到'[a,b,c]'? –

0

只是在末尾添加的條件:

>>> D = [[i,j,k] for i in A for j in B for k in C if i + j - k == 3] 
>>> D 
[[2, 2, 1], [2, 3, 2], [3, 2, 2]] 
2

只需添加if i+j-k == 3。您不需要A[i]等,因爲該索引每個list,而i,jk已經是元素本身。

D = [[i,j,k] for i in A for j in B for k in C if i+j-k == 3] 

你也應該考慮itertools.product避免嵌套這樣的:

import itertools 
D = [[i,j,k] for i,j,k in itertools.product(A, B, C) if i+j-k == 3] 
+0

是的,我現在看到。我會在一兩週內換上新眼鏡,對不起。 – TigerhawkT3

+0

如果績效很重要......哪一個要考慮? –

+3

我不知道哪一個運行得更快,但帶有'itertools'的那個更容易爲n個列表編寫,特別是如果你把它們全部放到一個容器中,在這一點上,你可以執行'itertools.product(* container) '。 – TigerhawkT3