반응형
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
반응형
'Development Tip' 카테고리의 다른 글
Elixir를위한 좋은 IDE (0) | 2020.11.10 |
---|---|
PATINDEX 패턴 인수에서 밑줄 문자를 이스케이프하는 방법은 무엇입니까? (0) | 2020.11.10 |
사전을 반복하고 값을 변경하는 방법은 무엇입니까? (0) | 2020.11.10 |
iPhone 앱을 컴파일 할 때 armv6보다 armv7의 장점은 무엇입니까? (0) | 2020.11.10 |
Maven 종속성 해결 (충돌) (0) | 2020.11.10 |