有人可以解释以下代码行背后的语法含义:
temp3 = [x for x in temp1 if x not in s]
Run Code Online (Sandbox Code Playgroud)
我知道这是为了找出 2 个列表之间的差异,但是这里的“x”代表什么?正在比较的列表中的每个单独元素?我明白这一点temp1并且s是列表。此外,x for x必须具有相同的变量还是可以是x for y?
[x for x in temp1 if x not in s]
Run Code Online (Sandbox Code Playgroud)
稍微重新排序可能会有所帮助,因此您可以从左到右阅读整个内容。让我们把第一个x移到最后。
[for x in temp1 if x not in s yield x]
Run Code Online (Sandbox Code Playgroud)
我添加了一个假yield关键字,所以它读起来自然是英文。如果我们然后添加一些冒号,它会变得更加清晰。
[for x in temp1: if x not in s: yield x]
Run Code Online (Sandbox Code Playgroud)
真的,这是事物被评估的顺序。x变量来自for循环,这就是为什么你可以在ifandyield子句中引用它。但是列表推导式的编写方式是将正在产生的值放在前面。所以你最终使用了一个尚未定义的变量名。
事实上,这最后的重写正是您编写显式生成器函数的方式。
def func(temp1, s):
for x in temp1:
if x not in s:
yield x
Run Code Online (Sandbox Code Playgroud)
如果你打电话,func(temp1, s)你会得到一个相当于列表的生成器。你可以用 把它变成那个列表list(func(temp1, s))。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |