Python列表替换

时间:2011-06-23 16:46:33

标签: python list replace

如何用另一个列表中相同位置的元素替换列表中的每个元素?我觉得这样的事情可能有用:

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 :(得分:3)

5件事:

  • 您引用的coloutcol我认为实际上是list1list2
  • list1list2大小不同,会崩溃
  • 您没有检查n上的边界,因此如果您的文本文件超过4行,则会崩溃
  • n + 1行实际上没有做任何事情,它应该是n += 1
  • line.replace不进行内联替换,它会返回一个新字符串。

因此请将其更改为line = line.replace(...)

我不知道你想要完成什么。此计划将第1行中的a替换为a_replacedb替换为第{2}行b_replacedc替换为第3行c_replaced,{ {1}}在第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

答案 1 :(得分:0)

replace返回新字符串。您需要line = line.replace(col[n], outcol[n])

答案 2 :(得分:0)

replace不会更改字符串,它会返回修改后的字符串的副本。

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

答案 3 :(得分: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()

这应该有效。评论澄清