2013-10-13 4 views
-1

다음과 같은 문제가 있습니다. 나는 다음과 같은 목록을 가지고 있습니다 :특수 청크 분할 목록

>>> l = list(range(20)) 
>>> l 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> # What I want: 
>>> [[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9] , ...] 

길이가 4 인 필자의 목록을 가장 파이썬 적으로 어떻게 얻을 수 있습니까? 나는 여기에서 명백한 무엇인가 놓치는 것처럼 느낀다. 나는 완전히 How do you split a list into evenly sized chunks?을 알고 있지만 아직 단서가 없습니다 ...

미리 감사드립니다! 답변의

+0

당신이 고민하고있는 무슨을 확장 할 수 : n에서 n - 1에 - 유일한 변화는 xrange의 단계입니다? 참조 된 대답은이 문제에 대한 매우 Pythonic 한 접근법의 범위를 제공합니다. – Simon

+0

아니, 아니, 아니야! 각 청크의 마지막 요소는 다음 청크의 첫 번째 요소와 같습니다. –

+0

@ 범위 [(0, len (l), 3)]에 대한 [l [a : a + 4] ' –

답변

2

직접 복사 당신이 링크를 게시 한 질문입니다.

def chunks(l, n): 
    for i in xrange(0, len(l), n - 1): 
     yield l[i:i + n] 


list(chunks(range(20), 4)) 
[[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9], [9, 10, 11, 12], [12, 13, 14, 15], [15, 16, 17, 18], [18, 19]] 
+0

마침내 질문을 올바르게 읽은 사람. 대답을 주셔서 감사합니다. 네, 저 자신을 위해 그걸 알아 냈습니다. 고마워요! –

0
zip(*[iter(list(range(20)))]*4) 
+0

내가 원하는 것은 아닙니다. 각 청크의 마지막 요소는 다음 청크의 첫 번째 요소와 같습니다. –

0
a = range(20) 
b = [a[i:i+4] for i in xrange(0, len(a), 4)] 
print b 
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]] 
관련 문제