2013-09-28 75 views
2

我是新來的python,我想要一些指導我遇到的問題。Python,2個列表之間的所有可能的數字組合

比方說,你有兩個列表,與相同長度和寫滿數字:在相同的位置

x=[0,1,2,3] 
y=[0,4,5,6] 

如何計算的Python列表中的號碼之間的號碼? 所以這個例子。

[0,1,2,3] 
[0,2,2,3] 
[0,3,2,3] 
[0,4,2,3] 
[0,1,3,3] 
... 

我希望有更多經驗的人對此有所瞭解。

+0

您能否澄清一下「列表中相同位置的數字之間的數字」是什麼意思? – darthbith

+0

你只需要在每個位置之間的數字,還是所有的組合?在你的例子中,你需要'[0,4,3,5]' – beroe

+0

那麼,在你的例子中,結果會有4 ** 3個條目? –

回答

7
x=[0,1,2] 
y=[0,4,5] 

from itertools import product 

for lst in product(*(range(a, b+1) for a, b in zip(x, y))): 
    print(lst) 
#>>> (0, 1, 2) 
#>>> (0, 1, 3) 
#>>> (0, 1, 4) 
#>>> (0, 1, 5) 
#>>> (0, 2, 2) 
#>>> (0, 2, 3) 
#>>> (0, 2, 4) 
#>>> (0, 2, 5) 
#>>> (0, 3, 2) 
#>>> (0, 3, 3) 
#>>> (0, 3, 4) 
#>>> (0, 3, 5) 
#>>> (0, 4, 2) 
#>>> (0, 4, 3) 
#>>> (0, 4, 4) 
#>>> (0, 4, 5) 

zipxy併產生(在這種情況下)[(0, 0), (1, 4), (2, 5)]

for a, b in取每對然後解壓縮到ab,因此對於第二和a = 1b = 4

然後,每個人製作一個range。它是range(a, b+1),因爲範圍中的最後一項被刪除。

你再有範圍的迭代:

[ range(0, 1), range(1, 5), range(2, 6) ] 

product需要一些iterables,使所有可能的組合的迭代。所以,你「解壓」的iterables用「*」操作符,所以product被稱爲像

product(*[ range(0, 1), range(1, 5), range(2, 6) ]) 

這相當於

product(range(0, 1), range(1, 5), range(2, 6)) 

和產生的結果。

+0

是的,這正是我需要的。非常感謝你! – FUBARnl