2017-10-28 256 views
-1

給定兩個列表(a和b),我想用列表'b'的三個元素替換列表'a'的三個元素。目前我使用的表達式是這樣的:同時替換多個列表元素(Python)

a[0], a[5], a[7] = b[11], b[99], b[2] 

,因爲我需要有很多不同的陣列我想知道做這樣的操作非常頻繁,如果有此問題的更緊湊的解決方案(我需要的元素數量取而代之總是3)。我正在考慮類似的東西:

a[0,5,7] = b[11,99,2] 

這顯然不起作用。

回答

1

如果您在一個Python列表,你可以做這樣的事情:

toReplace = [0,5,7] 
targetIndices = [11, 99, 2] 

for i,j in zip(toReplace, targetIndices): a[i] = b[j] 

如果您在一個numpy的陣列,它的更簡單:

a[toReplace] = b[targetIndices] 
#i.e, a[[0,5,7]] = b[[11, 99, 2]] 
+0

這簡化了代碼,當您需要替換相當數量的元素,但不是當您需要替換時他們中的幾個。我已經詳細說明了我的問題,我總是需要在給定的時間替換三個元素。 – Istvanb

+1

@Istvanb如果你有一個Python列表,那麼這就是你所能做的,以防萬一你有一個numpy數組,你可以做一些你想做的事情,查看更新後的答案。 –

1

可能有一些更好的解決方案但這是訣竅:

ind1 = [0,5,7] 
ind2 = [11,99,2] 

for i in range(len(ind1)): 
    a[ind1[i]]=b[ind2[i]] 
+0

當您需要更換相當數量的元素時,這會簡化代碼,但不會在您只需更換其中幾個元素時使用。我已經詳細說明了我的問題,我總是需要在給定的時間替換三個元素。 – Istvanb