在python中迭代未知数量的嵌套循环

Posted

技术标签:

【中文标题】在python中迭代未知数量的嵌套循环【英文标题】:Iterating over an unknown number of nested loops in python 【发布时间】:2012-11-06 17:42:18 【问题描述】:

我有数量不定的用户定义列表,每个列表都包含单词。例如,可能有如下三个列表:

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:
            ...

但我不知道在哪里停下来......

【问题讨论】:

【参考方案1】:

itertools.product 完全符合您的要求:

from itertools import product

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

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

【讨论】:

鉴于他不知道列表的数量,product(*lists) 可能更贴切。 @Lattyware:你在评论时正在这样做 我很好奇product是如何实现的。我能想到的解决问题的唯一方法是使用递归。 product 本身是否使用递归? 这个方法只下一层。有没有办法降低未知级别的嵌入式列表。所以像 [[[[1,2,3],[4,5,6]],['Test','All']]]? @rdt0086:您的评论不足以让我理解您的问题 - 我建议将其作为一个新问题提出,而不是对此答案发表评论,并准确显示您想要的行为。【参考方案2】:

使用python 3.2

from itertools import product

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

【讨论】:

以上是关于在python中迭代未知数量的嵌套循环的主要内容,如果未能解决你的问题,请参考以下文章

Python中的嵌套循环

C++ 中没有嵌套循环的 2 组合,其中迭代次数等于 2 组合的数量

Python:动态嵌套for循环,每个循环具有不同的范围

python中的if循环怎么样?

python 利用 for ... else 跳出双层嵌套循环

python 利用 for ... else 跳出双层嵌套循环