首页 > 解决方案 > 基本问题:表达式后的 for 循环(迭代器)

问题描述

我正在努力了解 Python 如何处理变量之后的循环。我认为它可能与 Python 中的迭代器/迭代器有关,但我不确定我是否真的理解它的用法。基本上在下面的代码中,我理解了为什么它可以产生变量组合的数学原理,但我不明白这是创建列表的有效方法。根据我使用其他语言的经验,for 循环总是在表达式之前出现,并且在有多个时正确嵌套。

temp = [('CH', 'AG', 'ME', 'GS')]
[(temp[i],temp[j]) for i in range(len(temp)) for j in range(i+1, len(temp))]

#produces:[('CH', 'AG'), ('CH', 'ME'), ('CH', 'GS'),
#('AG', 'ME'),('AG', 'GS')('ME', 'GS')]

谁能解释这里发生了什么?

标签: pythonfor-loopiterator

解决方案


内联for循环最终相互嵌套。如果你要把它写出来,你会这样做:

temp = [('CH', 'AG', 'ME', 'GS')]
ret = []
for i in range(len(temp)):
    for j in range(i+1, len(temp)):
        ret.append((temp[i], temp[j]))

基本上,如果你有多个内联 for 循环,它们会嵌套,这样你声明的第一个是外循环,你声明的最后一个是内循环。有关更详细的说明,请参阅此 Stackoverflow 问题。

Python 允许将这些“列表推导式”作为简写,因为它更容易且更“pythonic”(要了解这意味着什么,请打开 python 控制台并键入import this;这里的相关陈词滥调是“平面比嵌套更好”)。您会看到如何以非常简单易懂的方式在一行中创建整个列表,而不是像大多数情况下那样必须写出四行并逐步逐步构建数组其他语言。


推荐阅读