Python 목록이 항상 단일 항목을 포함하는 것으로 알려진 경우 다음과 다른 방법으로 액세스 할 수있는 방법이 있습니까?
mylist[0]
당신은 '왜 당신은 원하십니까?'라고 물을 수 있습니다. 호기심 만. 파이썬에서 모든 것을 할 수있는 다른 방법이있는 것 같습니다 .
Python 목록이 항상 단일 항목을 포함하는 것으로 알려진 경우 다음과 다른 방법으로 액세스 할 수있는 방법이 있습니까?
mylist[0]
당신은 '왜 당신은 원하십니까?'라고 물을 수 있습니다. 호기심 만. 파이썬에서 모든 것을 할 수있는 다른 방법이있는 것 같습니다 .
list
가 최상의 데이터 유형이 아닐 수 있습니까?
mylist[0]
요소가 하나 이상 있으면 성공하지만 실제로 요소가 30 개 있으면 불평하지 않습니다. singleitem, = mylist
정확히 하나의 요소가 있는지 확인합니다.
답변:
시퀀스 풀기 :
singleitem, = mylist
# Identical in behavior (byte code produced is the same),
# but arguably more readable since a lone trailing comma could be missed:
[singleitem] = mylist
반복기 프로토콜의 명시 적 사용 :
singleitem = next(iter(mylist))
파괴적인 팝 :
singleitem = mylist.pop()
음수 색인 :
singleitem = mylist[-1]
단일 반복을 통해 설정 for
합니다 (루프가 종료 될 때 루프 변수가 마지막 값으로 계속 사용 가능하기 때문에) :
for singleitem in mylist: break
다른 많은 것 (위의 비트를 결합하거나 변경하거나 암시 적 반복에 의존)하지만 아이디어를 얻을 수 있습니다.
singleitem = (lambda x: x)(*mylist)
[singleitem] = mylist
.
[]
시퀀스 언 패킹 에 사용 하는 것이 눈살을 찌푸 리지만 (배티를 유발 for [i, x] in enumerate(iterable):
합니다), 예, 단일 값을 언 패킹하는 경우 후행 쉼표를 쉽게 놓칠 수 있으며 가독성을 위해 괄호를 사용하는 것이 정당합니다. 나는 그것을 대답에 추가했습니다. 감사!
more_itertools
라이브러리에 iterable에서 하나의 항목을 반환하는 도구가 있다고 추가하겠습니다 .
from more_itertools import one
iterable = ["foo"]
one(iterable)
# "foo"
또한 more_itertools.one
iterable이 비어 있거나 둘 이상의 항목이있는 경우 오류를 발생시킵니다.
iterable = []
one(iterable)
# ValueError: not enough values to unpack (expected 1, got 0)
iterable = ["foo", "bar"]
one(iterable)
# ValueError: too many values to unpack (expected 1)
more_itertools
타사 패키지입니다. > pip install more-itertools