[python] x보다 큰 첫 번째 Python 목록 색인?

x보다 큰 목록에서 첫 번째 인덱스를 찾는 가장 Pythonic 방법은 무엇입니까?

예를 들어

list = [0.5, 0.3, 0.9, 0.8]

함수

f(list, 0.7)

돌아올 것이다

2.



답변

next(x[0] for x in enumerate(L) if x[1] > 0.7)


답변

목록이 정렬되면 bisect.bisect_left(alist, value)큰 목록의 경우보다 빠릅니다 next(i for i, x in enumerate(alist) if x >= value).


답변

filter(lambda x: x>.7, seq)[0]


답변

>>> alist= [0.5, 0.3, 0.9, 0.8]
>>> [ n for n,i in enumerate(alist) if i>0.7 ][0]
2


답변

for index, elem in enumerate(elements):
    if elem > reference:
        return index
raise ValueError("Nothing Found")


답변

다른 것:

map(lambda x: x>.7, seq).index(True)


답변

1) NUMPY ARGWHERE, 일반 목록

numpy를 사용하는 것이 좋으면 일반 목록 (정렬 또는 정렬되지 않음)에서 다음이 작동합니다.

numpy.argwhere(np.array(searchlist)>x)[0]

또는 목록으로 답변이 필요한 경우 :

numpy.argwhere(np.array(searchlist)>x).tolist()[0]

또는 정수 인덱스로 답이 필요한 경우 :

numpy.argwhere(np.array(searchlist)>x).tolist()[0][0]

2) NUMPY SEARCHSORTED, 정렬 된 목록 (목록 검색에 매우 효율적)

그러나 검색 목록이 정렬되어 있으면 np.searchsorted 함수를 사용하는 것이 훨씬 더 깔끔하고 좋습니다 .

numpy.searchsorted(searchlist,x)

이 함수를 사용할 때 좋은 점은 단일 값 x를 검색 할뿐만 아니라 x도 목록이 될 수 있다는 것입니다. 즉, 검색된 값 목록 [x1, x2, x3 .. xn에 대한 색인 목록을 반환 할 수도 있습니다. ], ( 이 경우 목록 이해력에 비해 매우 효율적입니다 ).