Python находит индекс элементов функционально в зависимости от условия - PullRequest
0 голосов
/ 30 октября 2019

Скажем, у меня есть список в форме:

mylist = [5, 8, 40, 90, 3, 100, 79, 10, 10]

Я хочу найти индексы элементов в пределах 80% от значения максимума в списке. Я могу сделать это с помощью нескольких циклов, но я хочу узнать, есть ли более функциональный способ сделать это. Вот что я использовал:

max_nr = max(mylist)
all_max = list(filter(lambda y : y > max_nr*0.8, mylist))

Есть ли следующий шаг (или один шаг) с map или filter, который мог бы сказать: пройти по списку и сохранить только индексте элементы, которые подчиняются ограничениям, превышающим число.

Я ищу альтернативу применению третьего шага:

    all_max_index = [mylist.index(i) for i in all_max]

Ответы [ 3 ]

4 голосов
/ 30 октября 2019

Вы можете использовать enumerate, а затем распаковать индекс вместе с номером в понимании списка, чтобы получить индексы.

>>> indices = [i for i, num in enumerate(mylist) if num > max_nr * 0.8]
>>> indices
[3, 5]
2 голосов
/ 30 октября 2019

Один из возможных способов:

all_max_index = list(filter(lambda i : mylist[i] > max_nr*0.8, range(len(mylist))))
2 голосов
/ 30 октября 2019

Мне удалось собрать все это в одну строку. Если вам нужен больший шаг, дайте мне знать, и я покажу вам!

>>> mylist = [5, 8, 40, 90, 3, 100, 79, 10, 10]
>>> [mylist.index(x) for x in mylist if x > (max(mylist) * (80/100))]
[3, 5]
...