我正试图在for循环中使用walrus来创建一个列表,
像这样的东西:
data = [l := line.strip().somefunc() for line in iterable_obj if(l[0] == 'sth')]
但它返回一个空列表有人能告诉我我在这里做错了什么吗?
您只需要交换赋值表达式的位置(因为条件是先求值的(:
iterable_obj = ("a", "b", "sth")
data = [l for line in iterable_obj if (l := line.strip().split())[0] == 'sth']
print(data) # [['sth']]
您似乎需要在if中定义walrus运算符,因为它是首先计算的:
[j for i in range(10) if (j := i) == 5]
请注意,在您的示例中,您一定在代码的其他地方定义了l
,就好像我在左侧定义时试图在if语句中使用j时会出现名称错误一样。
[evaluatedafter for x in L if evaluatedfirst]
在多个行中,您正在尝试这样做:
if l[0] == "something": # <- 'l' was never defined
l = line.strip().somefunc()
这里不需要使用海象,只需执行:
iterable_obj = [' Hello world sth', ' here', 'we', 'go']
data = [line.strip() for line in iterable_obj if ('sth' not in line)]
print(data)
输出:
['here', 'we', 'go']