假设我有一个清单:
myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]
就地(双重重点)替换所有4
44
的最有效和最简单的pythonic方法是什么?standard
?
我也很好奇为什么没有strings
这样做的方式(尤其是当{{1}}有非就地 replace
方法)?
答案 0 :(得分:21)
myl[:] = [x if x != 4 else 44 for x in myl]
使用列表推导执行非就地替换,然后如果您真的想要更改原始列表,则将新值切片分配到原始列表中。
答案 1 :(得分:10)
我们可以使用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]
答案 2 :(得分:1)
for item in myl:
if item ==4:
myl[myl.index(item)]=44
答案 3 :(得分:1)
while True:
try:
myl[myl.index(4)] = 44
except:
break
try-except
方法虽然更多 pythonic ,但效率较低。此timeit program on ideone比较了此处提供的至少两个答案。