【问题标题】:Basic question: for loops after expression (Iterators) [duplicate]基本问题:表达式后的for循环(迭代器)[重复]
【发布时间】:2019-03-13 10:02:07
【问题描述】:

我很难理解 Python 如何处理变量之后的 for 循环。我认为它可能与 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')]

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

【问题讨论】:

  • 这是一个列表理解。网上有很多关于它们的参考资料/教程。
  • 在复杂性方面它与其他语言相似。你应该寻找列表理解
  • 我将从list comprehensions 上的官方 Python 文档开始。
  • 虽然我有点晚了,但让我补充一点,列表理解比普通的 for 循环要快一些。

标签: python for-loop iterator


【解决方案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 is better比嵌套”)。您会看到如何以非常简单易懂的方式在一行中创建整个列表,而不是像大多数情况下那样必须写出四行并逐步缓慢地构建数组其他语言。

【讨论】:

  • 谢谢!我不知道在 SO 中搜索什么,因为我以前从未遇到过这些,也不知道它们叫什么,感谢帮助!
猜你喜欢
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2018-09-12
  • 2016-10-20
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多