我必須搜索列表並用一個元素替換所有出現的元素。到目前爲止,我對代碼的嘗試讓我無處可去,那麼執行此操作的最佳方法是什麼?查找和替換列表中的元素(python)
例如,假設我的列表中有下列整數
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
,我需要用值來代替數字1出現的所有10所以我需要輸出
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
因此我的目標是將數字1的所有實例替換爲數字10.
我必須搜索列表並用一個元素替換所有出現的元素。到目前爲止,我對代碼的嘗試讓我無處可去,那麼執行此操作的最佳方法是什麼?查找和替換列表中的元素(python)
例如,假設我的列表中有下列整數
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
,我需要用值來代替數字1出現的所有10所以我需要輸出
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
因此我的目標是將數字1的所有實例替換爲數字10.
>>> a= [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for n, i in enumerate(a):
... if i == 1:
... a[n] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
這是一個糟糕的非pythonic解決方案。考慮使用列表理解。 – AdHominem 2016-12-31 11:56:23
這是一個很好的如果非pythonic解決方案。考慮使用列表理解。 – 2017-02-02 13:35:42
嘗試使用list comprehension和ternary operator。
>>> a=[1,2,3,1,3,2,1,1]
>>> [4 if x==1 else x for x in a]
[4, 2, 3, 4, 3, 2, 4, 4]
>>> a=[1,2,3,4,5,1,2,3,4,5,1]
>>> item_to_replace = 1
>>> replacement_value = 6
>>> indices_to_replace = [i for i,x in enumerate(a) if x==item_to_replace]
>>> indices_to_replace
[0, 5, 10]
>>> for i in indices_to_replace:
... a[i] = replacement_value
...
>>> a
[6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6]
>>>
列表解析效果很好 - 與枚舉循環通過可以爲您節省一些內存(B/C的操作的基本到位做)。
還有函數式編程...查看map用法:
>>> a = [1,2,3,2,3,4,3,5,6,6,5,4,5,4,3,4,3,2,1] >>> map(lambda x:x if x!= 4 else 'sss',a) [1, 2, 3, 2, 3, 'sss', 3, 5, 6, 6, 5, 'sss', 5, 'sss', 3, 'sss', 3, 2, 1]
如果你有幾個值替換,也可以使用字典:
a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1]
dic = {1:10, 2:20, 3:'foo'}
print([dic.get(n, n) for n in a])
> [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]
如果在'dic'中找不到'n',這不會引發錯誤嗎? – 2016-08-17 23:17:54
謝謝,你是對的,我添加了一個try-catch塊。 – roipoussiere 2016-08-18 08:41:42
@ user2914540我改進了一下你的答案,所以如果找不到'n',它就可以工作。我希望你不介意。你的「嘗試/除去」解決方案不好。 – jrjc 2016-08-18 08:48:17
a = [1,2,3,4,5,1,2,3,4,5,1,12]
for i in range (len(a)):
if a[i]==2:
a[i]=123
您可以使用for和or while循環;但是如果你知道內置枚舉函數,那麼建議使用Enumerate。 1
這是什麼,順便說一下? – outis 2010-04-06 01:40:29