sel*_*edu 9 python if-statement list-comprehension generator-expression
我有一个简单的清单.
>>> a = [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我想使用列表推导从它创建一个新列表.
>>> b = [x*2 for x in a]
>>> b
[0, 2, 4]
Run Code Online (Sandbox Code Playgroud)
很简单,但是如果我只想操作非零元素呢?
'if'在列表推导中需要'else',所以我想出了这个.
>>> b = [x*2 if x != 0 else None for x in a]
>>> b
[None, 2, 4]
Run Code Online (Sandbox Code Playgroud)
但理想的结果是.
>>> b
[2, 4]
Run Code Online (Sandbox Code Playgroud)
我可以这样做
>>> a = [0, 1, 2]
>>> def f(arg):
... for x in arg:
... if x != 0:
... yield x*2
...
>>> list(f(a))
[2, 4]
Run Code Online (Sandbox Code Playgroud)
或使用'过滤器'和lambda
>>> a = [0, 1, 2]
>>> list(filter(lambda x: x != 0, a))
[1, 2]
Run Code Online (Sandbox Code Playgroud)
如何使用列表推导获得此结果?
Jor*_*ley 18
b = [x*2 for x in a if x != 0]
Run Code Online (Sandbox Code Playgroud)
如果你把条件放在最后你不需要别的(事实上不能有其他的)
遵循模式:
[ <item_expression>
for <item_variables> in <iterator>
if <filtering_condition>
]
Run Code Online (Sandbox Code Playgroud)
我们可以解决它:
>>> lst = [0, 1, 2]
>>> [num
... for num in lst
... if num != 0]
[1, 2]
Run Code Online (Sandbox Code Playgroud)
这是关于形成if条件测试"非零"值.