Python列表替换
如何把一个列表中的每个元素替换成另一个列表中相同位置的元素呢?我想我可以这样做:
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
这里有五个要点:
- 你提到的
col
和outcol
,我猜其实是list1
和list2
。 list1
和list2
的大小不一样,这样会出错。- 你没有检查
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,