Поиск элементов списка в массиве в Python

У меня есть два массива A и B. У меня есть список indices.

Я хочу найти каждый элемент indices в A и вывести соответствующие значения из B. Я представляю текущие и ожидаемые результаты.

import numpy as np

A=np.array([[ 0,  4],
       [ 0,  5],
       [1,6]])

B=np.array([[9.16435586e-05],
       [1.84193464e-14],
       [1.781909182e-5]])

indices= [[0,4],[1,6]]

for i in range(0,len(indices)):
    A=indices[i]
    print(A)

Текущий выход:

[0, 4]
[1, 6]

Ожидаемый результат:

[[0,4],[1,6]]
[[9.16435586e-05],[1.781909182e-5]]

В вашем коде никогда не используется B. Как вы могли ожидать печатать его значения???

Serge Ballesta 13.02.2023 08:51

Это верно. Я действительно не знаю, как указать порядок, чтобы напечатать значения из B.

rajunarlikar123 13.02.2023 08:54

но indices= [[0,4],[1,6]] содержит фрагменты A, а не индексы

RomanPerekhrest 13.02.2023 09:01

Вы можете называть все, что вам нравится. По сути, я хочу найти [0,4] из indices в A и вывести соответствующее значение из B, то есть [9.16435586e-05]. Аналогично для [1,6].

rajunarlikar123 13.02.2023 09:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
67
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Чтобы создать список на основе соответствия индекса, я бы сделал это так, вы также можете изменить это в зависимости от вашего варианта использования.

new_list = []
for i, elem in enumerate(A):
    if list(elem) in indices:
        new_list.append(B[i])
Ответ принят как подходящий
common_index=[x for x,y in enumerate(A) if list(y) in indices]
#[0, 2]
lst=[]

for t in common_index:
    lst.append(list(B[t]))

#output
[[9.16435586e-05], [1.781909182e-05]]

Есть ли способ добавить значения B?

rajunarlikar123 13.02.2023 09:11

Numpy хорошо обрабатывает массивы чисел в векторной форме. Здесь вам лучше использовать простые списки Python:

A = [[ 0,  4],
       [ 0,  5],
       [1,6]]
B = [[9.16435586e-05],
       [1.84193464e-14],
       [1.781909182e-5]]
indices= [[0,4],[1,6]]
print([A[i] for i,v in enumerate(A) if v in indices])
print([B[i] for i,v in enumerate(A) if v in indices])

дает, как и ожидалось:

[[0, 4], [1, 6]]
[[9.16435586e-05], [1.781909182e-05]]

Вы можете использовать метод numpy where для достижения этого:

import numpy as np

A=np.array([[ 0,  4],
       [ 0,  5],
       [1,6]])

B=np.array([[9.16435586e-05],
       [1.84193464e-14],
       [1.781909182e-5]])

indices= [[0,4],[1,6]]

for i in range(0,len(indices)):
    index = np.where(A == i)
    print(index)
    print(A[index])
    print(B[index])

Другие вопросы по теме