Получение индекса списка для первого значения, удовлетворяющего критерию

У меня есть список

a = [1.0, 1.2, 1.1, 1.4, 0.1]

and from that list I would like to get the index of the first value that satisfies some criterion, say x > 1.1

Что было бы хорошим способом сделать это в python?

2
nl ja de

3 ответы

Вы можете комбинировать next и enumerate :

>>> next(i fили i,x in enumerate(a) if x > 1.1)
1
>>> next(i fили i,x in enumerate(a) if x > 1.3)
3

или

>>> next((i,x) fили i,x in enumerate(a) if x > 1.3)
(3, 1.4)

если бы вы хотели оба.

5
добавлено

Я думаю, что это возможно little больше pythonic, чем некоторые другие ответы - если это то, что вам нужно.

a = [1.0, 1.2, 1.1, 1.4, 0.1]

def crit(x):
    return x > 1.3

index = None
for i,v in enumerate(a):
    if crit(v):
        index = i
        break

print index
0
добавлено

Вы можете сделать это:

def analyze(l, criteria):
    for idx in range(len(l)):
        if criteria(l[idx]):
            return idx

И затем используйте его так:

a = [1.0, 1.2, 1.1, 1.4, 0.1]
analyze(a, lambda x: x > 1.1)

Я не думаю, что это слишком pythonic. Вероятнее всего, существуют более питонические способы.

0
добавлено
Это возвращает значение, а не индекс.
добавлено автор will, источник
Я также согласен с тем, что это не очень pythonic.
добавлено автор will, источник
@will: О! Понимаю. Тогда это изменит.
добавлено автор Pablo Santa Cruz, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community