Вернуть индексы массива из функции

У меня есть массив и функция, и я хотел бы, чтобы функция возвращала список индексов, в которых разница двух последовательных элементов превышает пороговое значение.

У меня есть:

def func (y, t=100):
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            return(i)

Проблема, с которой я столкнулся, заключается в том, что эта функция возвращает только первый индекс, в котором мой оператор if истинен. Как мне получить остальные?

yield i и собирать элементы в list (другими словами, преобразовать вашу функцию в функцию генератора)
Abdul Niyas P M 05.06.2018 06:03

Не возвращай. Просто запечатлейте это.

Nishant 05.06.2018 06:05
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
48
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

def peak_detect (y_, threshold=100):
    indicesList = []
    for i in range(1, len(y_)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > threshold:
            indicesList.append(i)
    return(indicesList)
Ответ принят как подходящий

Есть два пути. Во-первых, yield вместо return даст вам генератор:

def func (y, t=100):
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            yield(i)

Или добавьте список в свою функцию:

def func (y, t=100):
    output = []
    for i in range(1, len(y)): #Range skips 1st element
        if abs(y[i] - y[i-1]) > t:
            output.append(i)
    return output

С понимание списка вы можете сделать это следующим образом:

Код:

def peak_detect(in_data, threshold=100):
    return [i for i, (x, y) in enumerate(zip(in_data, in_data[1:]))
            if abs(y - x) >= threshold]

Код теста:

data = [1, 2000, 2001, 4000]

print(peak_detect(data))

Результат:

[0, 2]

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