关于python:使用if语句列出理解

List comprehension with if statement

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

1
2
3
4
5
6
7
8
>>> 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])
                              ^

但它给了我一个无效的语法错误,其中^已被放置。这个lamba函数有什么问题?


你把命令搞错了。if应该在for之后(除非它在if-else三元运算符中)

1
[y for y in a if y not in b]

然而,这是可行的:

1
[y if y not in b else other_value for y in a]


你把if放在最后:

1
[y for y in a if y not in b]

列表理解的编写顺序与其嵌套的完全指定的对应项相同,基本上,上面的语句转换为:

1
2
3
4
outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)

您的版本尝试执行此操作:

1
2
3
4
outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)

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


列表理解公式:

1
[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]

因此,您可以这样做:

1
[y for y in a if y not in b]

仅用于演示:[如果Y不在B中,则为Y在A中,则为假]


这不是lambda函数。这是一个清单理解。

只需更改顺序:

1
[ y for y in a if y not in b]