使用Python替换列表中的值
我有一个列表,我想把那些满足条件的值替换成None,也就是空值。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
比如,如果条件是检查一个数是否是奇数(也就是用item%2来判断),那么应该返回:
[None, 1, None, 3, None, 5, None, 7, None, 9, None]
那么,有什么最有效的方法来做到这一点呢?
7 个回答
13
还有一种方法:
>>> L = range (11)
>>> map(lambda x: x if x%2 else None, L)
[None, 1, None, 3, None, 5, None, 7, None, 9, None]
79
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则满足时,程序才会做出反应。
例如,如果你在写一个游戏,可能会希望当玩家的分数达到一定值时,游戏就会给他们奖励。这种情况下,你就需要用到条件判断。
条件判断就像是在问一个问题:“如果这个条件成立,我就做这个事情;如果不成立,我就做另一个事情。”这样可以让程序根据不同的情况做出不同的反应。
在代码中,条件判断通常用一些特定的语法来表示,比如“if”语句。这个“if”就像是一个开关,只有当条件满足时,开关才会打开,程序才会执行后面的代码。
所以,理解条件判断是编程中非常重要的一部分,它能帮助我们让程序变得更加智能和灵活。
ls = [x if (condition) else None for x in ls]
248
用列表推导式创建一个新列表:
new_items = [x if x % 2 else None for x in items]
如果你想的话,可以直接在原来的列表上进行修改,但其实这样并不会节省时间:
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
这里有一些(Python 3.6.3)的时间测试,证明了并没有节省时间:
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的时间测试:
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