Development Tip

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

yourdevel 2020. 11. 10. 22:21
반응형

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_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)

내 목록이 매우 길 때 비슷한 문제가 발생했습니다. 이해력 또는 필터 기반 솔루션은 전체 목록을 통과합니다. 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)

>>> 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

이미 많은 답이 있다는 것을 알고 있지만 가끔 비단뱀이라는 단어가 '한 줄'로 번역되는 느낌이 듭니다.

더 나은 정의 가이 답변에 더 가깝다고 생각할 때 :

"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)

위의 내용은 초보자가 쉽게 이해할 수 있으며 베테랑 파이썬 프로그래머가 받아 들일만큼 간결하다고 생각합니다.

멍청한 코드를 작성 하는 것이 긍정적 이라고 생각 합니다.

참고 URL : https://stackoverflow.com/questions/2236906/first-python-list-index-greater-than-x

반응형