在Python中就地替换列表中所有元素的出现次数
假设我有一个列表:
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
那么,有什么最简单又高效的方式可以在这个列表里直接把所有的 4
替换成 44
呢?这里的“直接”是指不需要创建一个新的列表,而是在原来的列表上进行修改。
我也很好奇,为什么没有一个“标准”的方法来做到这一点呢?特别是当 字符串
有一个不在原地的 replace
方法时?
4 个回答
-2
for item in myl:
if item ==4:
myl[myl.index(item)]=44
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
-2
while True:
try:
myl[myl.index(4)] = 44
except:
break
虽然使用 try-except
的方法更符合 Python 的风格,但效率却比较低。这个 在 ideone 上的 timeit 程序 对这里提供的至少两个答案进行了比较。
31
myl[:] = [x if x != 4 else 44 for x in myl]
用列表推导式来进行替换,这样就不会直接在原来的列表上修改。然后,如果你真的想改变原来的列表,可以把新的值切片赋值回去。
22
我们可以用 enumerate
来遍历这个列表,然后把旧的值换成新的值,方法如下:
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
for idx, item in enumerate(myl):
if item == 4:
myl[idx] = 44
print myl
# [1, 2, 3, 44, 5, 44, 44, 44, 6]