首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python替换列表中的值

使用Python替换列表中的值
EN

Stack Overflow用户
提问于 2009-10-08 19:54:18
回答 6查看 838.5K关注 0票数 163

我有一个列表,其中我希望将值替换为None,其中condition()返回True。

代码语言:javascript
复制
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

例如,如果条件检查bool(项%2)应返回:

代码语言:javascript
复制
[None, 1, None, 3, None, 5, None, 7, None, 9, None]

执行此操作的最有效方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-08 19:58:51

使用列表理解构建一个新列表:

代码语言:javascript
复制
new_items = [x if x % 2 else None for x in items]

如果需要,您可以就地修改原始列表,但这实际上并不节省时间:

代码语言:javascript
复制
items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for index, item in enumerate(items):
    if not (item % 2):
        items[index] = None

以下是演示非timesave的(Python 3.6.3)计时:

代码语言:javascript
复制
In [1]: %%timeit
   ...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   ...: for index, item in enumerate(items):
   ...:     if not (item % 2):
   ...:         items[index] = None
   ...:
1.06 µs ± 33.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [2]: %%timeit
   ...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   ...: new_items = [x if x % 2 else None for x in items]
   ...:
891 ns ± 13.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

和Python 2.7.6计时:

代码语言:javascript
复制
In [1]: %%timeit
   ...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   ...: for index, item in enumerate(items):
   ...:     if not (item % 2):
   ...:         items[index] = None
   ...: 
1000000 loops, best of 3: 1.27 µs per loop
In [2]: %%timeit
   ...: items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   ...: new_items = [x if x % 2 else None for x in items]
   ...: 
1000000 loops, best of 3: 1.14 µs per loop
票数 240
EN

Stack Overflow用户

发布于 2009-10-08 19:58:58

代码语言:javascript
复制
ls = [x if (condition) else None for x in ls]
票数 79
EN

Stack Overflow用户

发布于 2009-10-09 10:54:17

这里有另一种方法:

代码语言:javascript
复制
>>> L = range (11)
>>> map(lambda x: x if x%2 else None, L)
[None, 1, None, 3, None, 5, None, 7, None, 9, None]
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1540049

复制
相关文章

相似问题

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