Python 带条件的列表理解

Python 带条件的列表理解,python,if-statement,list-comprehension,generator-expression,Python,If Statement,List Comprehension,Generator Expression,我有一个简单的清单 >>> a = [0, 1, 2] 我想使用列表理解从中创建一个新列表 >>> b = [x*2 for x in a] >>> b [0, 2, 4] 很简单,但如果我只想在非零元素上操作呢 “如果”需要“其他”在列表理解中,所以我想出了这个 >>> b = [x*2 if x != 0 else None for x in a] >>> b [None, 2, 4] 但理想的结

我有一个简单的清单

>>> a = [0, 1, 2]
我想使用列表理解从中创建一个新列表

>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]
很简单,但如果我只想在非零元素上操作呢

“如果”需要“其他”在列表理解中,所以我想出了这个

>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]
但理想的结果是

>>> b
[2, 4]
我可以这样做

>>> a = [0, 1, 2]
>>> def f(arg):
...     for x in arg:
...         if x != 0:
...             yield x*2
... 
>>> list(f(a))
[2, 4]
或者使用“过滤器”和lambda

>>> a = [0, 1, 2]
>>> list(filter(lambda x: x != 0, a))
[1, 2]
我如何使用列表理解得到这个结果

b = [x*2 for x in a if x != 0]
如果你把你的条件放在最后,你就不需要一个else(事实上那里不能有else)

遵循以下模式:

[ <item_expression>
  for <item_variables> in <iterator>
  if <filtering_condition>
]
这都是关于形成一个if条件测试“非零”值

>>> lst = [0, 1, 2]
>>> [num
... for num in lst
... if num != 0]
[1, 2]