7

我有一个简单的列表。条件清单理解

>>> 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] 

或使用“过滤器”和拉姆达

>>> a = [0, 1, 2] 
>>> list(filter(lambda x: x != 0, a)) 
[1, 2] 

如何使用列表理解我得到这样的结果?

回答

12
b = [x*2 for x in a if x != 0] 

,如果你把你的病情,在结束时,你并不需要一个else(INFACT不能有其他人那里)

+0

你是我的英雄。 =) – selurvedu

5

以下模式:

[ <item_expression> 
    for <item_variables> in <iterator> 
    if <filtering_condition> 
] 

我们可以解决这个问题,如:

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

这是关于形成一个if条件测试“非零”值。

+0

感谢您的更详细的答案! – selurvedu

+0

不错彻底:) +1 –