Как получить диапазон значений из списка на Python? - PullRequest
0 голосов
/ 30 августа 2018

Я хотел бы сделать следующий код Matlab:

indexes=find(data>0.5);
data2=data(indexes(1):indexes(length(indexes))+1);

в Python, поэтому я сделал:

indexes=[x for x in data if x>0.5]
init=indexes[1]
print(indexes)
end=indexes[len(indexes)]+1
data2=data[init:end]

но я получаю эту ошибку:

end = indexes [len (indexes)] + 1 IndexError: список индексов вне диапазона

Я думаю, что индексы в Python могут не совпадать с индексами в Matlab?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

len(indexes) даст вам индекс последнего элемента списка, так что значение плюс 1 выходит за пределы диапазона списка.

Похоже, что вы пытаетесь найти индексы списка, которые имеют значения больше 0,5, и поместить эти значения в data2. Это лучше подходит для массива NumPy.

import numpy as np
data2 = data[data > 0.5]
0 голосов
/ 30 августа 2018

Ваше понимание списка состоит не из списка индексов, а из списка самих элементов. Вы должны сгенерировать индексы рядом с элементами, используя enumerate:

ind = [i for i, x in enumerate(data) if x > 0.5]

И не нужно быть настолько многословным с нарезкой:

data2 = data[ind[0]: ind[-1]+1] # Matlab's index 1 is Python's index 0

Индексирование списка индексов с помощью len(ind) даст IndexError, так как индексирование в Python начинается с 0 (в отличие от Matlab), а последний индекс следует выбирать с ind[len(ind)-1] или просто ind[-1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...