我有两个如下列表:
A = [[0, [1, 2]], [1, [3, 4]], [2, [5, 6]], [3, [7, 8]], [4, [9, 10]], [5, [11, 12]], [6, [13, 14]]]
和
B = [[0, [1, 2]], [1, [4, 5]], [4, [[7, 8], [9, 10]]]]
我想根据与列表B相关的某些条件替换A的某些元素。
我写了一个代码,可以满足我的需求,如下所示:
x = 3
v = [0, 1, 4]
for i in range (x):
if i in v and B[i][0] == A[i][0]:
A[i][1][0] = B[i][1][1]
for elem in v:
if elem not in range(x):
A[elem][1][0] = B[2][1][1][0]
A[elem+1][1][0] = B[2][1][1][1]
else:
A = A
print (A)
我的问题是这些行:
for elem in v:
if elem not in range (x):
A[elem][1][0] = B[2][1][1][0]
A[elem+1][1][0] = B[2][1][1][1]
如您所见,在浏览列表v
的元素后,检查这些元素是否不在range (x)
中,在这种情况下,该元素为4
,我想在这种情况下,将A
的某些元素替换为B
的某些元素,但是元素在列表[4, [[7, 8], [9, 10]]]
中的索引为{{1} }。是否还有其他方法可以在B
中使用2
,而这也是代码内4
的元素,而不是编写[4, [[7, 8], [9, 10]]]
?我想使用v
作为指标,而不是使用索引,因为它们是不同的。
谢谢
答案 0 :(得分:1)
如果您要坚持当前代码的结构,可以为此使用np.where
x= 3
v = [0, 1, 4]
import numpy as np
for i in range (x):
if i in v and B[i][0] == A[i][0]:
A [i][1][0] = B[i][1][1]
for elem in v:
if elem not in range (x):
# get index (in this case: 2)
ind = np.where(np.array([i[0] for i in B]) == elem)[0][0]
A [elem][1][0] = B[ind][1][1][0]
A [elem+1][1][0] = B[ind][1][1][1]
else:
A = A
print (A)