python 목록의 n번째 요소 또는 기본값을 가져오는 방법(사용할 수 없는 경우)
Python 에서는, 어떻게 하면 간단하게 다음과 같은 것을 할 수 있을까요?dictionary.get(key, default)
목록의 경우 - 예를 들어 목록의 n번째 요소 또는 사용할 수 없는 경우 기본값을 얻는 방법은 무엇입니까?
예를 들어, 리스트는myList
, 어떻게 하면5
한다면myList
비어있거나myList[0]
그렇지 않으면요?
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]
이 동작은, 만약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)
반복기를 on으로 되돌립니다.myList
,next()
반복기의 첫 번째 요소를 소비하고,StopIteration
error(기본값으로 호출된 경우 제외).여기에서는 두 번째 인수입니다.5
이것은 첫 번째 요소를 필요로 할 때만 동작합니다.이 예에서는 그렇습니다만, 질문 텍스트에서는 동작하지 않습니다.따라서...
또한 메모리에 임시 목록을 만들 필요가 없으며 이름이 없어도 모든 종류의 반복이 가능합니다(Gruszczy의 답변에 대한 Xiong Chiamiov의 코멘트 참조).
(L[n:n+1] or [somedefault])[0]
...의 비단뱀과 동등한 것을 찾고 있습니다.
dict.get(key, default)
리스트의 경우
일반적인 반복식품을 위해 이것을 하는 반복식 레시피가 있습니다.이러한 레시피를 실장하고 있는 서드파티제 라이브러리를 간단하게 Import 할 수 있습니다.
코드
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()
이 도구는 누락된 인덱스에 대한 기본값을 반환합니다.이는 일반 반복 항목에 적용됩니다.
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
Python 3.4의 사용contextlib.suppress(exceptions)
건축하다getitem()
유사한 방법getattr()
.
import contextlib
def getitem(iterable, index, default=None):
"""Return iterable[index] or default if IndexError is raised."""
with contextlib.suppress(IndexError):
return iterable[index]
return default
값싼 해결책은 정말로 열거하여 사용하는 것을 지시하는 것이다..get()
여느 때처럼
dict(enumerate(l)).get(7, my_default)
답을 읽은 후 다음을 사용합니다.
(L[n:] or [somedefault])[0]
@Joachim과 위의 내용을 조합하면
next(iter(my_list[index:index+1]), default)
예:
next(iter(range(10)[8:9]), 11)
8
>>> next(iter(range(10)[12:13]), 11)
11
아니면, 좀 더 명확할 수도 있지만len
my_list[index] if my_list[index:index + 1] else default
이것은 원라이너 솔루션이 아니지만 다음과 같이 기본값을 사용하여 함수를 정의할 수 있습니다.
def get_val(myList, idx, default=5):
try:
return myList[idx]
except IndexError:
return default
개봉 시:
b, = a[n:n+1] or [default]
(최대 해석 시 등) 작은 인덱스의 경우k
인수, 길이 목록을 새로 만들고k
(추가된 요소가 로 설정되어 있음)d
다음과 같습니다.
def fill(l, k, d):
return l + (k - len(l)) * [d]
일반적인 사용법:
N = 2
arg_one, arg_two = fill("first_word and the rest".split(maxsplit=N - 1), N, None)
# arg_one == "first_word"
# arg_two == "and the rest"
같은 예에서 짧은 목록을 사용합니다.
arg_one, arg_two = fill("one_word_only".split(maxsplit=N - 1), N, None)
# arg_one == "one_word_only"
# arg_two == None
언급URL : https://stackoverflow.com/questions/2492087/how-to-get-the-nth-element-of-a-python-list-or-a-default-if-not-available
'programing' 카테고리의 다른 글
출력을 파일과 stdout으로 리디렉션하는 방법 (0) | 2023.04.19 |
---|---|
공유 호스트의 "LOG_BACKUP" 때문에 데이터베이스의 트랜잭션 로그가 가득 찼습니다." (0) | 2023.04.19 |
폴더를 선택하도록 OpenFileDialog를 구성하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
SQL에서 EXISTS와 IN의 차이점은 무엇입니까? (0) | 2023.04.19 |
Swift에서 어레이에 요소 추가 (0) | 2023.04.19 |