2014-01-14 73 views
0

我需要能夠對各種列表執行嵌套循環,例如:如何遍歷列表中的所有示例路徑:[[1,2,3,],[1,2,3],...]

A = [1,2,3] 
B = [1,2,3] 
C = [1,2,3] 

for a in A: 
    for b in B: 
     for c in C: 
     #do something 

我想有一些代碼(如上面的嵌套循環是做即同樣的事情),可以採取由[A]+[B]+[C]和遍歷每個樣本路徑給出的列表清單是什麼。

這是好的,如果這段代碼佔用2或3行,因爲在我的真實世界的例子中,我不只是A,B,C,而且D,E,F,G,...,所以做一個嵌套循環如上所述太繁瑣。

+0

'A + B + C'會給你另一個列表,而不是列表列表。 – wim

+0

@wim固定。此外,我認爲排列建議不起作用。我正在尋找嵌套循環功能不是排列。 – user2763361

回答

2

您正在尋找產品的三個列表的;使用itertools.product()讓你崩潰的三個嵌套循環來:

from itertools import product 

for a, b, c in product(A, B, C): 

因爲A == B == C在這裏,你可以進一步簡化到:

for a, b, c in product(A, repeat=3): 

如果你有多個列表生產的產品,把它們一個列表,以便您可以生成的輸入列表的變量數量的乘積:

lists = [A, B, C, D, E] 
for combination in product(*lists): 
0

將您的子列表打包成列表列表,並使用「splat」運算符*將它們解包。這將允許您在只有一個嵌套層次上迭代儘可能多的循環。

>>> A = [1, 2, 3] 
>>> B = ['a', 'b', 'c'] 
>>> mylists = [A, B] 
>>> from itertools import product 
>>> for x in product(*mylists): 
...  print x 
(1, 'a') 
(1, 'b') 
(1, 'c') 
(2, 'a') 
(2, 'b') 
(2, 'c') 
(3, 'a') 
(3, 'b') 
(3, 'c') 
1

你想要一個笛卡爾乘積從itertools:

from itertools import product 
for x in product(A,B,C): 
    print x 
相關問題