就地替换python中列表中所有元素的出现

时间:2014-06-13 09:23:41

标签: python list replace in-place

假设我有一个清单:

myl = [1, 2, 3, 4, 5, 4, 4, 4, 6]

就地双重重点)替换所有4 44的最有效和最简单的pythonic方法是什么?standard

我也很好奇为什么没有strings这样做的方式(尤其是当{{1}}有非就地 replace方法)?

4 个答案:

答案 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比较了此处提供的至少两个答案。