한 줄의 머리와 꼬리
단일 명령에서 첫 번째 요소의 목록과 "꼬리"의 압축을 푸는 파이썬적인 방법이 있습니까?
예를 들면 :
>> head, tail = **some_magic applied to** [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
Python 3.x에서는이 작업을 훌륭하게 수행 할 수 있습니다.
>>> head, *tail = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
3.x의 새로운 기능은 *
추가 값을 의미하기 위해 압축을 풀 때 연산자 를 사용하는 것 입니다. PEP 3132-Extended Iterable Unpacking에 설명되어 있습니다. 또한 시퀀스뿐만 아니라 반복 가능한 모든 작업을 수행 할 수있는 이점이 있습니다.
또한 정말 읽기 쉽습니다.
PEP에 설명 된대로 2.x에서 (잠재적으로 임시 목록을 만들지 않고) 동등한 작업을 수행하려면 다음을 수행해야합니다.
it = iter(iterable)
head, tail = next(it), list(it)
주석에서 언급했듯이 head
이는 예외를 발생시키는 대신 기본값을 얻을 수있는 기회도 제공합니다 . 이 동작을 원하면 next()
기본값이있는 선택적 두 번째 인수를 사용하므로 head 요소가없는 경우 next(it, None)
제공합니다 None
.
당연히 목록에서 작업하는 경우 3.x 구문이없는 가장 쉬운 방법은 다음과 같습니다.
head, tail = seq[0], seq[1:]
>>> mylist = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> head, tail = mylist[0], mylist[1:]
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
그러나 O (1) head,tail
작업의 복잡성을 위해 사용해야합니다 deque
.
다음 방법 :
from collections import deque
l = deque([1,2,3,4,5,6,7,8,9])
head, tail = l.popleft(), l
목록의 모든 요소를 반복해야 할 때 유용합니다. 예를 들어 병합 정렬에서 2 개의 파티션을 순진하게 병합합니다.
람다를 사용하는 Python 2
>>> head, tail = (lambda lst: (lst[0], lst[1:]))([1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
>>> head
1
>>> tail
[1, 2, 3, 5, 8, 13, 21, 34, 55]
@GarethLatty 의 Python 2 솔루션을 기반으로 빌드 한 다음은 Python 2에서 중간 변수없이 한 줄에 해당하는 값을 얻는 방법입니다.
t=iter([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]);h,t = [(h,list(t)) for h in t][0]
If you need it to be exception-proof (i.e. supporting empty list), then add:
t=iter([]);h,t = ([(h,list(t)) for h in t]+[(None,[])])[0]
If you want to do it without the semicolon, use:
h,t = ([(h,list(t)) for t in [iter([1,2,3,4])] for h in t]+[(None,[])])[0]
참고URL : https://stackoverflow.com/questions/10532473/head-and-tail-in-one-line
'programing' 카테고리의 다른 글
Asp.net Identity MVC 5에서 역할 만들기 (0) | 2020.10.05 |
---|---|
Postgis 설치 : "지오메트리"유형이 없습니다. (0) | 2020.10.04 |
CSS를 사용하여 Div를 2 개의 열로 분할 (0) | 2020.10.04 |
git은 큰 바이너리 파일을 추적 할 때 매우 느립니다. (0) | 2020.10.04 |
OS X의 Bash 스크립트 절대 경로 (0) | 2020.10.04 |