2012-11-18 46 views
15

我有可变数量的用户定义列表,每个列表包含单词。例如,可能有三个列表如下所示:在Python中迭代未知数量的嵌套循环

list1 = ["THE", "A"] 
list2 = ["ELEPHANT", "APPLE", "CAR"] 
list3 = ["WALKED", "DROVE", "SAT"] 

我想是每一个组合遍历每个列表,检查每个针对已知单词的字典,看看哪些字分组最喜欢词典。这意味着迭代将如下所示:

[ 
    "THE ELEPHANT WALKED", 
    "THE APPLE WALKED", 
    "THE CAR WALKED", 
    "THE ELEPHANT DROVE", 
    "THE APPLE DROVE", 
    "THE CAR DROVE", 
    # ... 
    "A CAR SAT", 
] 

问题是可以有任意数量的列表,并且每个列表可以包含可变数量的项目。我知道递归可以用于这个,但我需要一个没有递归的解决方案。我把遇到的问题是事实,有可能列出的可变量,否则我会这样写:

for a in list1: 
    for b in list2: 
     for c in list3: 
      ... 

但我不知道在哪里停止...

回答

24

itertools.product不正是你想要什么:

from itertools import product 

lists = [ 
    ['THE', 'A'], 
    ['ELEPHANT', 'APPLE', 'CAR'], 
    ['WALKED', 'DROVE', 'SAT'] 
] 

for items in product(*lists): 
    print items 
+2

鉴于他不知道名单的produc数量,'' t(*列表)''可能更适合。 –

+1

@Lattyware:在你评论的时候是这样做的 – Eric

+0

伟大的思想家都认为,+1。 –

1

使用Python 3.2

from itertools import product 

[" ".join(i) for i in product(list1,list2,list3)]