У меня есть список. Каждый элемент представляет собой целое число с действительным значением, и я хочу извлечь индексы указанного элемента. Например:

import numpy as np
idx = np.where(A==1) #A is a list of [1,1,2,3,4,5....]

Но np.where, похоже, не работает для списка.

Моя следующая задача - получить новый список из другого списка, B, на основе полученных индексов:

C = B[idx]
0
jingweimo 26 Июн 2017 в 15:32
1
Собираетесь ли вы что-то сделать с этими индексами, иначе в вашем новом списке не будет n вхождений 1? Так может быть и B = [1] * A.count(1)?
 – 
Jon Clements
26 Июн 2017 в 15:38

3 ответа

Преобразуйте список A в ndarray, и он должен работать

idx = np.where(np.array(A)==1)
C = [B[i] for i in idx[0]]
4
Ghilas BELHADJ 26 Июн 2017 в 16:08
@ np.where дает кортеж, но как проверить многие элементы, которые были извлечены.
 – 
jingweimo
26 Июн 2017 в 15:46
A - это 1-мерный массив. Индексы, которые вы ищете, находятся в idx[0]
 – 
Ghilas BELHADJ
26 Июн 2017 в 15:52
Это хорошо, но idx [0] - это массив. По-прежнему неудобно получать новый список, напрямую используя C = B [idx [0]]
 – 
jingweimo
26 Июн 2017 в 16:06
Это лучшее, что я хочу !!
 – 
jingweimo
26 Июн 2017 в 16:10

Нет необходимости в numpy ИМО. Вы можете создать B, просто используя что-то вроде:

B = [ele for ele in A if ele == 1]

1
Sam Chats 26 Июн 2017 в 15:35
Спасибо! но что, если мне по-прежнему нужны те же самые индексы для работы с другим списком?
 – 
jingweimo
26 Июн 2017 в 15:36
Это выполнит фильтрацию в Python . Обычно Python не очень эффективен при обработке данных в пакетном режиме.
 – 
Willem Van Onsem
26 Июн 2017 в 15:37
Тогда у вас может быть отдельный список индексов с indices = [i for i in range(len(A)) if A[i] == 1].
 – 
Sam Chats
26 Июн 2017 в 15:41

Если A является обычным списком (список по умолчанию в Python), тогда Python интерпретирует:

A == 1

Как проверка, равно ли list 1. Что, конечно, не так.

Вы должны превратить A в массив:

Aa = np.array(A)        # construct a numpy array
idx = np.where(Aa == 1) # obtain the indices
B = Aa[idx]             # make a copy (again on the numpy array)
1
Willem Van Onsem 26 Июн 2017 в 15:35