[python] 파이썬 목록의 n 번째 요소를 얻는 방법 또는 사용할 수없는 경우 기본값

파이썬 dictionary.get(key, default)에서 목록에 해당하는 것을 찾고 있습니다. 목록의 n 번째 요소를 가져 오는 라이너 이디엄이 있습니까?

예를 들어 myList 목록을 얻으려면을 얻 myList[0]거나 5 myList가 비어있는 목록입니다.

감사.



답변

l[index] if index < len(l) else default

부정적인 지수를 지원하기 위해 다음을 사용할 수 있습니다.

l[index] if -len(l) <= index < len(l) else default


답변

try:
   a = b[n]
except IndexError:
   a = default

편집 : TypeError 검사를 제거했습니다. 호출자가이를 처리하도록하는 것이 좋습니다.


답변

(a[n:]+[default])[0]

a커질 수록 아마도 더 낫 습니다.

(a[n:n+1]+[default])[0]

if a[n:]는 빈 목록 이기 때문에 작동 합니다.n => len(a)

이것이 어떻게 작동하는지에 대한 예는 다음과 같습니다. range(5)

>>> range(5)[3:4]
[3]
>>> range(5)[4:5]
[4]
>>> range(5)[5:6]
[]
>>> range(5)[6:7]
[]

그리고 완전한 표현

>>> (range(5)[3:4]+[999])[0]
3
>>> (range(5)[4:5]+[999])[0]
4
>>> (range(5)[5:6]+[999])[0]
999
>>> (range(5)[6:7]+[999])[0]
999


답변

방금 발견했습니다 :

next(iter(myList), 5)

iter(l)에 반복자를 반환 myList, next()반복자의 첫 번째 요소를 소비하고, 제기 StopIteration, 여기에 두 번째 인수의 경우 디폴트 값, 호출하는 경우를 제외하고 오류를5

이것은 첫 번째 요소를 원할 때만 작동합니다.이 예제에서는 그렇습니다. 그러나 질문 텍스트에는 없습니다.

또한 메모리에 임시 목록을 만들 필요가 없으며 이름이 없어도 반복 가능한 유형으로 작동합니다 (gruszczy의 답변에 대한 Xiong Chiamiov의 의견 참조)


답변

(L[n:n+1] or [somedefault])[0]


답변

… python에서 동등한 dict.get(key, default)목록을 찾습니다.

있습니다 itertools 조리법 일반적으로 반복 가능 객체에 대해이 작업을 수행합니다. 편의상 > pip install more_itertools이러한 레시피를 구현하는이 타사 라이브러리를 가져오고 가져올 수 있습니다.

암호

import more_itertools as mit


mit.nth([1, 2, 3], 0)
# 1    

mit.nth([], 0, 5)
# 5    

세부 묘사

nth레시피 의 구현은 다음과 같습니다 .

def nth(iterable, n, default=None):
    "Returns the nth item or a default value"
    return next(itertools.islice(iterable, n, None), default)

마찬가지로이 dict.get()도구는 누락 된 인덱스에 대한 기본값을 반환합니다. 일반적인 iterables에 적용됩니다 :

mit.nth((0, 1, 2), 1)                                      # tuple
# 1

mit.nth(range(3), 1)                                       # range generator (py3)
# 1

mit.nth(iter([0, 1, 2]), 1)                                # list iterator 
# 1  


답변

저렴한 솔루션은 실제로 다음과 같이 열거하고 .get()평소와 같이 사용하여 받아들입니다.

 dict(enumerate(l)).get(7, my_default)