使用if语句列出理解

Ora*_*Tux 90 python if-statement list-comprehension

我想比较2个iterables并打印出两个iterables中出现的项目.

>>> a = ('q', 'r')
>>> b = ('q')


# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
                              ^
Run Code Online (Sandbox Code Playgroud)

但是它给了我一个无效的语法错误^.这个lamba函数有什么问题?

Vol*_*ity 164

你的订单错了.在if应后的for(除非它是在if-else三元运算符)

[y for y in a if y not in b]
Run Code Online (Sandbox Code Playgroud)

但这可行:

[y if y not in b else other_value for y in a]
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 37

你把它if放在最后:

[y for y in a if y not in b]
Run Code Online (Sandbox Code Playgroud)

列表推导的编写顺序与它们嵌套的完全指定的对应项相同,基本上上述语句转换为:

outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)
Run Code Online (Sandbox Code Playgroud)

你的版本尝试这样做:

outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)
Run Code Online (Sandbox Code Playgroud)

但列表理解必须从至少一个外循环开始.


eum*_*iro 5

这不是lambda函数.这是列表理解.

只需更改顺序:

[ y for y in a if y not in b]
Run Code Online (Sandbox Code Playgroud)


Vis*_*hak 5

清单理解公式:

[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]
Run Code Online (Sandbox Code Playgroud)

因此,您可以这样做:

[y for y in a if y not in b]
Run Code Online (Sandbox Code Playgroud)

仅用于演示目的:[如果y不在b中,则为y,对于a中的y为假]

  • 您不能将“ else”放入列表理解中,至少不能放在其中。不要将列表理解(过滤)与条件表达式(必须具有一个值,使else表达式成为必需的)混淆。 (2认同)
  • 那是一个*条件表达式*。它可以在任何有效表达式适用的地方使用。它不特定于列表理解。 (2认同)