Первый индекс списка Python больше, чем х? - PullRequest
59 голосов
/ 10 февраля 2010

Какой самый Pythonic способ найти первый индекс в списке больше x?

Например, с

list = [0.5, 0.3, 0.9, 0.8]

Функция

f(list, 0.7)

вернется

2.

Ответы [ 9 ]

81 голосов
/ 10 февраля 2010
next(x[0] for x in enumerate(L) if x[1] > 0.7)
19 голосов
/ 10 февраля 2010

если список отсортирован, то bisect_left(alist, value) быстрее для большого списка, чем next(i for i, x in enumerate(alist) if x >= value).

13 голосов
/ 10 февраля 2010
filter(lambda x: x>.7, seq)[0]
10 голосов
/ 10 февраля 2010
>>> alist= [0.5, 0.3, 0.9, 0.8]
>>> [ n for n,i in enumerate(alist) if i>0.7 ][0]
2
5 голосов
/ 10 февраля 2010
for index, elem in enumerate(elements):
    if elem > reference:
        return index
raise ValueError("Nothing Found")
3 голосов
/ 10 февраля 2010

Еще один:

map(lambda x: x>.7, seq).index(True)
1 голос
/ 31 октября 2013

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

from itertools import takewhile

def f(l, b): return len([x for x in takewhile(lambda x: x[1] <= b, enumerate(l))])

l = [0.5, 0.3, 0.9, 0.8]
f(l, 0.7)
0 голосов
/ 07 ноября 2018

Я знаю, что ответов уже много, но иногда мне кажется, что слово pythonic переводится как «однострочный».

Когда я думаю, что лучшее определение ближе к , этот ответ :

«Использование возможностей языка Python для создания понятного, лаконичного и понятного кода».

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

l = [0.5, 0.3, 0.9, 0.8]

def f(l, x):
    for i in l:
        if i >x: break
    return l.index(i)


f(l,.7)

или

l = [0.5, 0.3, 0.9, 0.8]

def f(l, x):
    for i in l:
        if i >x: return l.index(i)



f(l,.7)

Я думаю, что вышесказанное легко понять новичку и все еще достаточно кратко, чтобы его мог принять любой опытный программист на python.

Я думаю, что написание тупой код является положительным.

0 голосов
/ 10 февраля 2010
>>> f=lambda seq, m: [ii for ii in xrange(0, len(seq)) if seq[ii] > m][0]
>>> f([.5, .3, .9, .8], 0.7)
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...