如何遍历列表列表中的所有样本路径:[[1,2,3,],[1,2,3],...]

时间:2014-01-14 16:18:10

标签: python list loops nested-loops nested-lists

我需要能够在各种列表上执行嵌套循环,例如:

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,...所以如上所述做一个嵌套循环太繁琐了。

2 个答案:

答案 0 :(得分: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):

答案 1 :(得分:1)

你想要一个来自itertools的笛卡尔积:

from itertools import product
for x in product(A,B,C):
   print x