2011-06-23 101 views
-5

如何用另一個列表中相同位置的元素替換列表中的每個元素?我認爲這樣的事情可能會起作用: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 

但它不起作用。我究竟做錯了什麼?

+2

你在哪裏宣佈col和outcol?他們應該是list1和list2嗎? – thegrinner

+2

如果你的意思是增加'n',你需要寫'n + = 1'。但是我正在努力弄清楚你希望你的程序做什麼。 – vimukthi

回答

0

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

3

5件事情:

  • 您參考coloutcol,我認爲實際上是list1list2
  • list1list2的大小不同,這會崩潰
  • 你不檢查就n的界限,因此,如果您的文本文件大於4行時間越長,就會死機
  • n + 1實際上並沒有做什麼,它應該是n += 1
  • line.replace不做內聯替換,它返回一個新的字符串。

因此將其更改爲line = line.replace(...)

我不知道你在做什麼。該程序將行1中的a替換爲第2行中的a_replaced,b,b_replaced,c行3中的c_replacedd行4中的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 

但是,如果your're嘗試應用在每一行的所有替代,方法如下:

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, 
0

替換沒有按」 t更改字符串,它會返回修改過的字符串的副本。

line = line.replace(col[n], outcol[n]) 
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() 

這應該工作。評論澄清