使用 if 语句进行列表推导
- 2025-01-22 08:45:00
- admin 原创
- 62
问题描述:
我想比较两个可迭代对象并打印两个可迭代对象中出现的项目。
>>> 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 函数有什么问题?
解决方案 1:
你搞错了顺序。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]
解决方案 2:
你把放在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)
但列表推导必须至少以一个外循环开始。
解决方案 3:
列表理解公式:
[<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 if y not in b else False for y in a]
解决方案 4:
这不是一个 lambda 函数。这是一个列表推导。
只需改变顺序:
[ y for y in a if y not in b]
解决方案 5:
如果使用足够大的列表not in b
子句,将对中的每个项目进行线性搜索a
。为什么不使用set?Set以可迭代对象作为参数来创建一个新的集合对象。
>>> a = ["a", "b", "c", "d", "e"]
>>> b = ["c", "d", "f", "g"]
>>> set(a).intersection(set(b))
{'c', 'd'}
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD