Python列表替换

-4 投票
4 回答
1197 浏览
提问于 2025-04-16 20:10

如何把一个列表中的每个元素替换成另一个列表中相同位置的元素呢?我想我可以这样做:

list1 = ['a', 'b', 'c', 'd']
list2 = ['a_replaced', 'b_replaced', 'c_replaced']
text = open(textfile, 'r')
 n = 0
for line in  text:
    line = line[0:len(line)-1]
    line.replace(col[n], outcol[n])
    print line
    n + 1 

但是这样不行。我哪里出错了呢?

4 个回答

0

我觉得这就是你想要实现的目标,虽然从你提供的代码来看,有点难以判断:

list1 = ['a', 'b', 'c', 'd']
list2 = ['a_replaced', 'b_replaced', 'c_replaced', 'd_replaced']
text = open(textfile, 'r')
for line in text:
    for index, old in enumerate(list1):
        line = line.replace(old, list2[index])
    print line
text.close()

这个应该可以正常工作。如果有不明白的地方,可以留言问我。

0

replace这个方法并不会直接改变原来的字符串,它是返回一个修改过的字符串的副本。

line = line.replace(col[n], outcol[n])
3

这里有五个要点:

  • 你提到的 coloutcol,我猜其实是 list1list2
  • list1list2 的大小不一样,这样会出错。
  • 你没有检查 n 的范围,如果你的文本文件超过4行,就会出错。
  • 那行 n + 1 其实没有任何作用,应该改成 n += 1
  • line.replace 不是直接在原地替换,它会返回一个新的字符串。

所以要改成 line = line.replace(...)

我不太清楚你想要实现什么。这个程序是把第1行的 a 替换成 a_replaced,第2行的 b 替换成 b_replaced,第3行的 c 替换成 c_replaced,第4行的 d 替换成 d_replaced

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r')
n = 0
for line in  text:
    if n >= len(replacements):
        break
    print line[:-1].replace(replacements[n][0], replacements[n][1])
    n += 1 

不过如果你想在每一行都应用所有的替换,下面是做法:

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r')
for line in  text:
    line = line[:-1]
    for oldtext, newtext in replacements:
        line = line.replace(oldtext, newtext)
    print line

或者是上面程序的简化版本:

replacements = [('a', 'a_replaced'), ('b', 'b_replaced'), ('c', 'c_replaced'), ('d', 'd_replaced')]
text = open(textfile, 'r').read()
for oldtext, newtext in replacements:
    text = text.replace(oldtext, newtext)
print text,

撰写回答