【问题标题】:Need some help understanding for loop需要一些帮助理解 for 循环
【发布时间】:2021-05-21 21:07:15
【问题描述】:

有人可以帮助我了解下面代码背后的逻辑

假设 mpg 是一个字典列表

cylinders = set(d['cyl'] for d in mpg)

我写了这段代码,但我正在寻找一些帮助来总结它

cylinders=list()
for d in mpg :
    cylinders.append(d['cyl'])

new_cylinders=set(cylinders)

【问题讨论】:

  • 我不确定你在问什么。这两个 sn-ps 做同样的事情。对于mpg 中的每个字典,它会将'cyl' 键的值添加到该列表/集合中。
  • 第一行代码等价于第二段代码,因此总结为一行。第二个代码块等同于第一个代码块,因此用更广泛的术语表达了第一个代码块的逻辑。
  • 我不明白你的问题。

标签: python loops for-loop


【解决方案1】:

举例说明清楚吗?

mpg = [ {'make':'Ford','cyl':12}, {'make':'Toyota','cyl':9}, {'make':'Rolls Royce','cyl':16} ]

在你的函数之后,你会:

new_cylinders = {12, 9, 16}

【讨论】:

  • 嗨@TimRoberts,感谢您的回答,我知道输出的样子,但让我感到困惑的是,没有包含 .add() 以及它是如何包含的保留之前 d['cyl'] 的记录。我还尝试以这种方式打印所有 *d['cyl']*s(单行 for 循环),但它发送了回溯,如果可能的话,你能告诉我该怎么做吗?
  • 在上面的“for”循环中,如果将cylinders.append 行替换为print( d["cyl"] ),我保证它会起作用。
  • 我的意思是如何在cylinders = set(d['cyl'] for d in mpg) 中进行更改,如果我无法正确传达我的目的,请见谅。
  • 给定一套,你可以做print( ', '.join(str(c) for c in cylinders) )
【解决方案2】:

set(...) 内部的东西称为 generator expression。当“裸”出现时,它们需要用括号括起来,但当它们作为函数调用的单个参数出现时,括号可以省略。

生成器表达式返回一个生成器,它会根据需要生成一系列值。在这种情况下,set() 函数将执行要求并构建一个结果集。 (所以您不需要显式的.add 的原因是您提供了一系列值来构建集合。)

(我想你也可以使用 set display 并写成cylinders = {d['cyl'] for d in mpg}

那么如何在生成器表达式中打印内容呢?好吧,for 之前的东西必须是一个表达式;只产生一个值的东西。您可以使用辅助功能来做到这一点:

def print_and_return(x):
    print(x)
    return x

cyls = set(print_and_return(d['cyl']) for d in mpg)

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多