【问题标题】:Unclear python syntax [duplicate]不清楚的python语法[重复]
【发布时间】:2017-10-06 22:15:57
【问题描述】:

我很难理解以下列表理解:

words = [word for line in open('words.txt', 'r') for word in line.split()]

我理解第一部分,word for line in open('words.txt', 'r'),但第二部分让我感到困惑。这是否意味着对于words.txt 中的每一行,在拆分line 上循环每个word

【问题讨论】:

  • 是的。这正是它的意思。
  • @JeanFrançoisFabre:这种欺骗是为了使用列表推导作为另一个列表推导的表达式,而不是在单个列表推导中使用多个 for 循环。
  • 那里的第二个答案可能涵盖了这种情况,但那里的答案完全是错误的上下文(这是发布问题的错误答案)。
  • 我注意到Python tutorial 涵盖了足够详细的语法,包括多个for 循环。
  • @Jean-FrançoisFabre:不,我们只需要找到一个更好的骗子。

标签: python list list-comprehension


【解决方案1】:

for 循环是嵌套的,从左到右。你可以把它写成这样的常规循环:

words = []
for line in open('words.txt', 'r'):
    for word in line.split():
        words.append(word)

所以for 循环之前的表达式是添加到生成列表的最终值,所有for 循环(以及任何if 测试)都嵌套在前面的循环或测试中执行。

所以,是的,对于打开的文件中的每一行,该行都被拆分,并且这些行的结果单词被添加到正在构建的列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2011-08-14
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多