array_one = [1, 2, 3, 4]
array_two = [6, 7, 1, 2, 17, 23, 3, 48, 4]

lc = [e for e in array_one if e in array_two]

Пока все хорошо, я нахожу те ценности, которые хочу. Следующим важным шагом для меня является получение индекса найденных предметов.

Я старался

lc_2 = [index for index, (e1, e2) in enumerate(zip(array_one, array_two)) if e1 == e2]

Но результаты не то, что мне нужно, или я их не понимаю.

Короче говоря: было бы неплохо найти повторяющиеся элементы с соответствующими индексами.

Это должна быть гибкая система, потому что в некоторых случаях у меня есть 2 матча, иногда 3, иногда 1 и т. Д.

1
oOinsaneOo 17 Янв 2021 в 03:14

2 ответа

Лучший ответ

Предполагая, что значения в array_two уникальны, вы можете использовать { {X1}}, чтобы найти индекс значений в array_one в array_two. Например, это понимание списка создаст список кортежей (значение, индекс в array_one, индекс в array_two) для каждого из значений в array_one, которые также находятся в array_two:

array_one = [1, 2, 3, 4]
array_two = [6, 7, 1, 2, 17, 23, 3, 48, 4]

lc_2 = [(e, i, array_two.index(e)) for i, e in enumerate(array_one) if e in array_two]

print(lc_2)

Выход:

[(1, 0, 2), (2, 1, 3), (3, 2, 6), (4, 3, 8)]
0
Nick 17 Янв 2021 в 00:25

Вы можете легко сделать это с помощью numpy:

import numpy
values, indices_one, indices_two = numpy.intersect1d(array_one, array_two, return_indices=True)
0
gagi 17 Янв 2021 в 00:22