如何更改列表的索引?

时间:2019-06-06 20:20:59

标签: python list indexing

我有两个如下列表:

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作为指标,而不是使用索引,因为它们是不同的。 谢谢

1 个答案:

答案 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)