基本问题:f​​or表达式后的循环(迭代器)

时间:2018-10-08 17:19:39

标签: python for-loop iterator

我正努力了解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')]

任何人都可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

内联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循环,则会嵌套它们,以使您声明的第一个是外循环,而声明的最后一个是内循环。有关详细说明,请参见this Stackoverflow question

Python允许这些“列表理解”为简写形式,因为它更容易使用,也更“ Pythonic”(要定义其含义,请打开python控制台并键入import this;此处的相关陈词是“ Flat比嵌套更好”)。您将了解如何以一种非常简单易懂的方式在一行中创建整个列表,而不用像在大多数情况下一样必须逐步写出四行并逐步构建阵列其他语言。