2017-01-05 1 views
1

목록을 n-max를 인수로하는 짝수 크기의 청크로 분할하고 싶습니다. n-max가리스트 길이보다 크다면리스트를 가장 큰 중복 덩어리로 나눕니다.목록을 균등 한 크기의 덩어리로 나눕니다. n-max

예 :

l = [1,2,3,4,5,6,7,8,9] 
n-max = 4 
for k, v in enumerate (l): 
    if k < len(l): 
     a = l[k:k+n-max] 
     if len(a) == n-max: 
      yield a 

>>> [[1,2,3,4],[2,3,4,5],[3,4,5,6,. [4,5,6,7],[5,6,7,8],[6,7,8,9]] 

리터의 길이가 N-최대 미만

. I는 I 자동 경우에서의 가능한 겹침 청크 크기를 감소 N-최대 청크 크기를 설정하는 기능이 필요

l = [1,2,3] 
>>> [[1,2],[2,3]] 

최대 중첩 청크 크기는 2이고, 그 최대 중첩 덩어리를 반환 할 목록은 n-max에서 청크 할 수 없습니다.

답변

3

피티 닉 방법으로 청크 크기로 nlen(your_list)-1의 최소값을 선택하여 목록을 분리 할 수 ​​있습니다.

In [39]: def chunk(n, lst): 
      n = min(n, len(lst)-1) 
      return [lst[i:i+n] for i in range(len(lst) - n+1)] 

데모 :

In [40]: chunk(4, l) 
Out[40]: 
[[1, 2, 3, 4], 
[2, 3, 4, 5], 
[3, 4, 5, 6], 
[4, 5, 6, 7], 
[5, 6, 7, 8], 
[6, 7, 8, 9]] 

In [41]: l = [1,2,3,4,5,6,7,8,9,10,11] 

In [42]: chunk(16, l) 
Out[42]: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]] 
관련 문제