我想比较2个迭代列表并打印出现在两个迭代列表中的项目。if语句的列表理解
>>> 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函数有什么问题?
我想比较2个迭代列表并打印出现在两个迭代列表中的项目。if语句的列表理解
>>> 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]
谢谢。我看到这篇文章http://stackoverflow.com/questions/4406389/if-else-in-a-list-comprehension关于lambda函数中的if else语句。我认为只使用if语句(没有else)会以相同的顺序工作。 – OrangeTux 2013-03-18 10:51:18
这不是一个lambda函数。这是一个列表理解。
只要改变顺序:
[ y for y in a if y not in b]
当然。笨。 – OrangeTux 2013-03-18 10:54:55
你把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)
但列表理解必须至少一个外环开始。
你一直很有帮助。谢谢。 – 2017-08-21 08:18:47
列表理解的公式:
[<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如果y不是在b,否则假y的在]
你不能在列表理解中放置一个'else',而不是至少放置一个。不要将列表理解(过滤)与条件表达式(必须具有值,使else表达式为必需)混淆。 – 2017-06-20 06:00:21
同意。尽管如代码所示,'else'可用于列表理解。 – 2017-06-21 11:43:49
这是一个*条件表达式*。它可以用在有效表达式适用的任何地方。它没有具体的列举理解。 – 2017-06-21 11:45:34
下面所有的答案是正确的,但也'B =(“Q”)'不创建一个元组。带有一个元素的元组需要一个明确的',',也就是'b =('q',)' – dmg 2013-03-18 10:48:58
我已经将元组更改为'iterables'。 – OrangeTux 2013-03-18 11:03:38