2010-08-18 3 views
38

는 파이썬 3에서 내가 할 수있을 것 같아요 :첫 번째로 나머지 목록을 나누는 Python 적 방법?

first, *rest = l 
정확히 내가 원하는 것입니다

,하지만 난 2.6을 사용하고 있습니다. 지금은 다음과 같이하고 있습니다.

first = l[0] 
rest = l[1:] 

괜찮 으면 좋겠지 만 좀 더 우아한 것이 있는지 궁금합니다.

+6

나는 위의 잘 생각합니다. 당신은 항상'first, rest = l [0], l [1 :]'을 할 수 있습니다. – katrielalex

+4

사실, 위의 경우에는 개선 할 수 없습니다 - http://www.python.org/dev/peps/pep-3132/. – katrielalex

+1

관련 : https://stackoverflow.com/questions/10532473/python-head-and-tail-in-one-line –

답변

29
first, rest = l[0], l[1:] 

기본적으로 동일한 것은 제외하고는 oneliner입니다. Tuple assigment rocks.

i = iter(l) 
first = next(i) # i.next() in older versions 
rest = list(i) 
+4

더 나은 점은 'first, last = l [: 1], l [1 :] in 'l'이 비어 있습니다 (그리고 그것은 더 귀엽습니다). –

+4

이것들은 의미 상으로는 동일하지 않다. l [: 1]은리스트이고, l [0]는리스트의 요소이다. –

12

당신은

first = l.pop(0) 

을 할 수있는 다음 l이 될 것입니다 :

이 조금 더 길고 덜 분명하지만, 일반화 된 모든 반복 가능 객체에 대한 (대신 sliceables로 제한되는)입니다 휴식. 원래 목록을 수정하기 때문에 원하는 내용이 아닐 수도 있습니다.

+2

안녕하세요! 나는 당신이 대중 음악 지수를 공급할 수 있는지 몰랐다. 그것은 이상하지만 편리합니다! 목록에 전환 방법이없는 이유가 궁금했습니다. 감사! – Shawn

+0

빈 목록에 대해서는 작동하지 않습니다 : '''x = []; x.pop (0) 역 추적 (가장 최근 통화 최종) : 파일 "", 라인 1, IndexError에서는 : 빈 목록에서 ''' – avyfain

-2

내가 제안 :

first, remainder = l.split(None, maxsplit=1) 
+0

'list'이없는 팝업'.split() '메소드를 호출합니다. – cpburnz

+0

내 실수, 비록 그것이 문자열에 대한 것이었다. – FGH

관련 문제