【问题标题】:why can't I use walrus in a one-line for expression为什么我不能在一行中使用海象来表达
【发布时间】:2022-08-03 22:52:32
【问题描述】:

我试图在 for 循环中使用海象来创建一个列表,

像这样的东西:

data = [l := line.strip().somefunc() for line in iterable_obj if(l[0] == \'sth\')]

但它返回一个空列表 有人可以提示我在这里做错了什么吗?

  • 这里真的不需要使用海象运算符

标签: python walrus-operator


【解决方案1】:

无需在这里使用海象,只需执行以下操作:

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']

【讨论】:

  • 感谢您的评论,但我实际上更喜欢使用海象,因为首先它不只使用 strip func,其次我需要在我的 if 条件下使用输出版本我会更新 question.tnx
  • 你不能以这种方式使用海象
【解决方案2】:

看来您需要在 if 中定义海象运算符,因为它是首先计算的:

[j for i in range(10) if (j := i) == 5]

请注意,在您的示例中,您必须在代码中的其他位置定义 l ,就好像如果我尝试在 if 语句中使用 j 并在左侧定义它时出现名称错误。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多