programing

python 목록의 n번째 요소 또는 기본값을 가져오는 방법(사용할 수 없는 경우)

powerit 2023. 4. 19. 00:30
반응형

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()반복기의 첫 번째 요소를 소비하고,StopIterationerror(기본값으로 호출된 경우 제외).여기에서는 두 번째 인수입니다.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

반응형