用if语句列出理解

我想比较2个迭代器并打印出现在两个迭代器中的项目。

>>> 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三元运算符中)

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

然而,这将工作:

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

你把这个if在最后:

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

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

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

您的版本试图做到这一点,而不是:

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

但列表理解必须以至less一个外部循环开始。

这不是一个lambda函数。 这是一个列表理解。

只需更改顺序:

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

列表理解公式:

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

因此你可以这样做:

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

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