2017-01-05 5 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 maxよりも小さいです。私があれば、自動的にリストの可能性の重複チャンクサイズに減少のn-maxのチャンクサイズを設定する機能を必要とする最大重複チャンクサイズは2です。

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

、それが最大の重複チャンクを返すようにしたいですリストはn-maxでチャンクすることはできません。

答えて

3

pythonの方法では、チャンクサイズとして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]] 
関連する問題