我有一个简单的清单。
>>> a = [0, 1, 2]
我想使用列表理解从中创建一个新列表。
>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]
很简单,但是如果我只想对非零元素进行操作怎么办?
'if' 在列表推导中需要 'else',所以我想出了这个。
>>> 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]
如何使用列表推导获得此结果?