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]) ^ |
但它给了我一个无效的语法错误,其中
你把命令搞错了。
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] |
。
你把
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] |