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

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

И из этого списка я хотел бы получить значение index значения first , которое удовлетворяет некоторому критерию, скажем, x > 1.1

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

2
kasperhj 29 Янв 2013 в 15:42

3 ответа

Лучший ответ

Вы можете объединить next и enumerate:

>>> next(i for i,x in enumerate(a) if x > 1.1)
1
>>> next(i for i,x in enumerate(a) if x > 1.3)
3

Или

>>> next((i,x) for i,x in enumerate(a) if x > 1.3)
(3, 1.4)

Если ты хотел обоих.

5
DSM 29 Янв 2013 в 11:46

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

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)

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

0
Pablo Santa Cruz 29 Янв 2013 в 11:45

Я думаю, что это, возможно, немного более питонический, чем некоторые другие ответы - если это то, что вы ищете.

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
will 29 Янв 2013 в 11:53