다음과 같은 코드가 있습니다.
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
좋습니다. 간단하지만 아이디어를 얻을 수 있습니다. 이제 thing
실제로 목록에 없을 수도 있습니다.이 경우 -1을 thing_index
. 다른 언어에서는 index()
요소를 찾을 수없는 경우 반환 할 것으로 예상 되는 것 입니다. 실제로 ValueError
.
나는 이것을 할 수있다 :
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
그러나 이것은 더럽게 느껴지고 ValueError
다른 이유로 인해 자랄 수 있는지 모르겠습니다 . 생성기 함수를 기반으로 다음과 같은 솔루션을 찾았지만 조금 복잡해 보입니다.
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
동일한 것을 달성하는 더 깨끗한 방법이 있습니까? 목록이 정렬되지 않았다고 가정 해 보겠습니다.
str.find
정확히하는 방법이 있습니다 : -1
대상에서 바늘을 찾을 수 없을 때 반환합니다 .
str.index()
검색 문자열이 없으면 예외가 발생합니다.
thing_index
." -이것은 확실히 비파이 토닉입니다. 작업이 성공하지 못한 경우 (의미없는) 토큰 값을 전달하는 것은 눈살을 찌푸리게합니다. 예외는 실제로 올바른 방법입니다. 특히thing_list[-1]
는 목록의 마지막 항목을 의미하는 유효한 표현식 이기 때문 입니다.