Por ejemplo, tengo una lista A :
A = [100, 200, 300, 200, 400, 500, 600, 400, 700, 200, 500, 800] Y tengo la lista B :
B = [100, 200, 200, 500, 600, 200, 500] Necesito identificar el índice de elementos en B con respecto a A
Yo he tratado:
list_index = [A.index(i) for i in B]Vuelve:
[0, 1, 1, 5, 6, 1, 5]Pero lo que necesito es:
[0, 1, 3, 5, 6, 9, 10]¿Cómo puedo resolverlo?
Recorro B y establezco el índice marcado en Ninguno en A. Por lo tanto, el código alterará A.
A = [100, 200, 300, 200, 400, 500, 600, 400, 700, 200, 500, 800] B = [100, 200, 200, 500, 600, 200, 500] res = [] for i in B: res.append(A.index(i)) A[A.index(i)] = None print(res)Producción:
[0, 1, 3, 5, 6, 9, 10]Esto es lo que yo usaría:
A=[100,200,300,200,400,500,600,400,700,200,500,800] B=[100,200,200,500,600,200,500] list_index = [] removedElements = 0 for i in B: indexInA = A.index(i) A.pop(indexInA) list_index.append(indexInA+removedElements) removedElements+=1 print(list_index)Puedes probar algo como esto. Muévase sobre ambas listas y agregue el índice cuando sean iguales:
A = [100,200,300,200,400,500,600,400,700,200,500,800] B = [100,200,200,500,600,200,500] i, j = 0, 0 list_index = [] while j < len(B): if B[j] == A[i]: list_index.append(i) j += 1 i += 1 print(list_index)Producción:
[0, 1, 3, 5, 6, 9, 10]
Puede crear una lista llamada índices y obtener el primer índice en ella. Luego itere el resto de los elementos en B , luego tome la porción de A del último índice en la lista de indices y obtenga el índice del elemento, agréguelo al último índice + 1, luego vuelva a agregarlo a la lista de indices .
indices = [A.index(B[0])] for i,v in enumerate(B[1:]): indices.append(A[indices[-1]+1:].index(v)+indices[-1]+1) #indices: [0, 1, 3, 5, 6, 9, 10]Puede iterar a través de la enumeración de A para realizar un seguimiento de los índices y generar los valores donde coinciden:
A = [100,200,300,200,400,500,600,400,700,200,500,800] B = [100,200,200,500,600,200,500] def get_indices(A, B): a_it = enumerate(A) for n in B: for i, an in a_it: if n == an: yield i break list(get_indices(A, B)) # [0, 1, 3, 5, 6, 9, 10] Esto evita usar index() varias veces.
A = np.array([100,200,300,200,400,500,600,400,700,200,500,800]) B = [100, 200, 200, 500, 600, 200, 500] idx = np.arange(len(A)) indices = {i: idx[A == i].tolist() for i in set(B)} [indices[i].pop(0) for i in B]