首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有非零值Python列表

只有非零值Python列表
EN

Stack Overflow用户
提问于 2014-08-03 18:12:53
回答 4查看 12K关注 0票数 3

我只想从python列表中提取非零数字。这就是我要做的。但它似乎不起作用。

代码语言:javascript
复制
d=[num if num for num in d]

其中d是我的原始列表,再次希望输出在相同的列表中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-03 18:15:48

代码语言:javascript
复制
d = [num for num in d if num]

编辑

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

代码语言:javascript
复制
d = [num if num else 0 for num in d]

另一种方式是:

代码语言:javascript
复制
d = map(lambda x: 1 if x else 0, d)
票数 2
EN

Stack Overflow用户

发布于 2014-08-03 18:17:32

代码语言:javascript
复制
In [5]: d =[1,2,3,0,0,9]

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

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

一些时间安排:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-08-03 18:16:08

试一试其中任何一种:

代码语言:javascript
复制
d = [x for x in d if x != 0]

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

d = [x for x in d if x]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25107644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档