只有非零值的Python列表

时间:2014-08-03 18:12:54

标签: python-2.7

我想从python列表中仅提取非零数字。 这就是我在做的事情。但它似乎没有工作。

d=[num if num for num in d]
  

其中d是我的原始列表,我想再次输出相同的列表

4 个答案:

答案 0 :(得分:1)

d = [num for num in d if num]

修改

根据您在下面的评论,“提取非零”意味着:“从列表中映射0和非零数字的方式:

d = [num if num else 0 for num in d]
另一种方式:

d = map(lambda x: 1 if x else 0, d)

答案 1 :(得分:1)

尝试以下任何一项:

d = [x for x in d if x != 0]

d = filter(lambda x: x != 0, d)

d = [x for x in d if x]

答案 2 :(得分:1)

In [5]: d =[1,2,3,0,0,9]

In [6]: d = filter(None,d) 

In [7]: d
Out[7]: [1, 2, 3, 9]

一些时间:

In [30]: %timeit filter(None,d)
1000000 loops, best of 3: 727 ns per loop

In [31]: %timeit filter(lambda x: x != 0, d)
100000 loops, best of 3: 3.89 µs per loop

In [32]: %timeit [x for x in d if x != 0]
100000 loops, best of 3: 2.33 µs per loop

In [33]: %timeit  [num for num in d if num]
100000 loops, best of 3: 2.04 µs per loop

由于您的列表中只有数字filter(None,d)可以正常使用。如果您有任何其他虚假值,如空列表[]等,它也会删除它们。

答案 3 :(得分:1)

你快到了。你只需要修复列表理解“语法”:

d = [num for num in d if num]

注意:这是可能的,因为Python会将0视为False