Hey There
Hey There

Reputation: 275

How to change the index of a list?

I have two lists like below:

A = [[0, [1, 2]], [1, [3, 4]], [2, [5, 6]], [3, [7, 8]], [4, [9, 10]], [5, [11, 12]], [6, [13, 14]]]

and

B = [[0, [1, 2]], [1, [4, 5]], [4, [[7, 8], [9, 10]]]]

I want to replace some elements of A based on some conditions related to list B.

I have written a code that does what I'm looking for, as below:

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)   

My problem is with these lines:

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]

As you can see, after looking through the elements of list v, and check if those elements are not in range (x), in this case, that element is 4, I want to replace some elements of A with some elements of B in this case that element is [4, [[7, 8], [9, 10]]] , However, the index of this element in list B is 2. Is there any other way to use 4 in [4, [[7, 8], [9, 10]]] which is also an element of v inside the code instead of writing B[2]? I want to use [x[0] for x in B] as the indicators instead of using the indexes, as those are different. Thanks

Upvotes: 0

Views: 1148

Answers (1)

Daniel
Daniel

Reputation: 2229

if you want to stick to the structure of your current code, you could use np.where for this

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)   

Upvotes: 1

Related Questions