有人可以帮助我了解下面代码背后的逻辑
假设 mpg 是一个字典列表
cylinders = set(d['cyl'] for d in mpg)
我写了这段代码,但我正在寻找一些帮助来总结它在一行中
cylinders=list()
for d in mpg :
cylinders.append(d['cyl'])
new_cylinders=set(cylinders)
答案 0 :(得分:0)
set(...)
里面的东西叫做 generator expression。出现“裸”时,需要用括号括起来,但当它们作为函数调用的单个参数出现时,可以省略括号。
一个生成器表达式返回一个 generator,它是一种根据需要会产生一系列值的东西。在这种情况下,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)