为什么我不能在一行中使用海象来表达



我正试图在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']

相关内容

  • 没有找到相关文章

最新更新