2017-10-28 22 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