2016-03-14 34 views
0

考慮一個文本文件和2個列表。在list_A有一些字母,並在list_B一些其他字母。我想要一個算法來找到list_A中存在的文本中的字母,並將它們替換爲list_B中具有相同索引的字母。它找到並替換它們,但是,每次它將其替換時,先前的結果都會消失。在python循環中使用替換方法

我的意思是在去年,我在print上次更換的結果。我怎麼解決這個問題?我的意思是我想要一個print,其中所有的字母都被替換,而不僅僅是最後一個。 這可能是這個循環的問題:

for i in text: 
    if i in list_A: 
     p=text.replace(i, list_B[list_A.index(i)]) 
print(p) 
+2

考慮['maketrans'](https://docs.python.org/2/library/string.html#string.maketrans)+ ['translate'](HTTPS://docs.python。組織/ 2 /庫/ string.html#string.translate)。 – bereal

+0

'p + = text.replace ...'怎麼樣? – Netwave

回答

2

這一行:

p=text.replace(i, list_B[list_A.index(i)]) 

通過你服用textp賦予它的新版本,每一次循環,但你'永遠不會更新text以包含新副本(您可能不應該這樣做,因爲您正在迭代它)。

我會通過使ptext循環外的副本,裏面,記住,使用方法你選擇做p = p.replace(...

熊開始,你也不必擔心多替換和您正在查看的訂單。例如,如果您要更換所有ab,也希望所有bc替換,然後用你的方法,如果你開始與aaaa你將最終cccc(因爲它取代他們所有b,然後檢查b ...),當你可能只想替換a(如果它在原始字符串中)。如果你擔心這一點,我會看看maketranstranslate,如貝瑞爾在評論中所提到的。

+0

我同意你對上面關於maketrans和翻譯的評論,但我想確保答案能解釋OP給出的代碼中的錯誤,以便它可以幫助解決將來的錯誤。之後我們可以進行優化:) –

+0

對不起,我誤解了你的答案,所以我的表現相關評論是無關緊要的。 – bereal

+0

我推薦你的評論是一個關於優化,沒關係:) –

0

這應該工作。

temp = text 
for i in temp: 
    if i in list_A: 
     temp=temp.replace(i, list_B[list_A.index(i)]) 

print "Original:",text 
print "Modified: ",temp