2016-11-17 116 views
2

我有搜索堆棧溢出和GOOGLE搜索這個問題的解決方案,不幸的是我一直無法找到解決方案。Python - 如何用另一個列表中的字符串值替換列表中存儲的字符串值?

我想用另一個列表中的字符串值替換存儲在列表中的字符串的值。

比如我有兩個列表:

list_a = ['file_x', 'file_x', 'file_x', 'file_x'] 
list_b = ['1', '2', '3', '4'] 

我想要的結果返回:

list_c =['file_1', 'file_2', 'file_3', 'file_4'] 

我是新來的蟒蛇,我努力做到這一點,我一直在使用一個嘗試for循環和str.replace(),但我不知道如何匹配每個數組的鍵值,並將list_a的每個元素的'x'替換爲list_b元素的字符串值。

任何幫助,這將不勝感激。

回答

7

使用zip來耦合對應的a s和b s。

>>> list(zip(list_a, list_b)) 
[('file_x', '1'), ('file_x', '2'), ('file_x', '3'), ('file_x', '4')] 

我們可以在方便的使用這個zip對象 for循環,開箱對成獨立的變量ab,然後該幹嘛a.replace('x', b)和所得到的值追加到我們的結果列表:

>>> list_c = [] 
>>> for a, b in zip(list_a, list_b): 
... list_c.append(a.replace('x', b)) 
... 
>>> list_c 
['file_1', 'file_2', 'file_3', 'file_4'] 

這也可以寫成的簡短列表理解:

>>> [a.replace('x', b) for a, b in zip(list_a, list_b)] 
['file_1', 'file_2', 'file_3', 'file_4'] 

正如Moinuddin指出,使用格式字符串這裏是一個更好的選擇,如果你定義的list_a

+0

謝謝!這不僅有助於解決問題,而且還教會了一種處理陣列的新方法。 – Lewis909

+1

@ Lewis909他們是列表:D –

+0

Ahh謝謝,因爲Python沒有數組,它有列表。 – Lewis909

3

的內容,如果你是一個創造list_a格式。更好的方法是使用{}而不是x並使用str.format()格式化字符串。例如:

>>> list_a = ['file_{}', 'file_{}', 'file_{}', 'file_{}'] 
>>> list_b = ['1', '2', '3', '4'] 
>>> [a.format(b) for a, b in zip(list_a, list_b)] 
['file_1', 'file_2', 'file_3', 'file_4'] 
+0

我會看看str.format()。這與str.replace()有什麼不同? – Lewis909

+0

'str.replace('x')'即使它是字符串的一部分,也會替換所有'x'的出現。作爲'{}'將把你的價值代替'{}'。 –

+1

@ Lewis909注意到你的字符串也可以包含字面值'{'和'}'(你只需要在格式字符串中將它們加倍;''字符串可以包含{{和}},並且這裏只有這個{} 」 .format(值)' –

相關問題