带条件的列表推导式

14 投票
2 回答
34555 浏览
提问于 2025-04-18 11:16

假设我有一个列表 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)。

撰写回答