带条件的列表推导式
假设我有一个列表 a = [0, 1, 2]
。
我知道我可以用一种叫做列表推导的方式,像这样来得到一个值翻倍的列表:
>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]
我想知道怎么才能让这个列表推导忽略输入列表中的 0
值,这样结果就变成 [2, 4]
了?
我尝试的办法失败了:
>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]
如果你想做一个根据条件使用不同逻辑的列表推导,可以查看 if/else 在列表推导中的用法。
2 个回答
8
按照这个模式:
[ <item_expression>
for <item_variables> in <iterator>
if <filtering_condition>
]
我们可以这样来解决:
>>> lst = [0, 1, 2]
>>> [num
... for num in lst
... if num != 0]
[1, 2]
关键在于设置一个“如果”条件来检查值是否为“非零”。
23
b = [x*2 for x in a if x != 0]
如果你把条件放在最后,就不需要写else(实际上在那儿也不能写else)。