2012-02-12 11 views
0

これは、「明白な」間違いを発見するために目の第二のペアが必要なコードの厄介な部分の1つです。私はリストのリストを処理しています。何らかの理由で、「リストの索引が範囲外です」とヒットしています。ここで単純なリスト処理関数のIndexError - 何が欠けていますか?

は抜粋です:

def group_ldata(data, freq, normal_grouping = True): 
    if freq > 1 and len(data) > (SOME_SANITY_FACTOR*freq): 
     i, output, subset, lastpos = (0, [],[], len(data)-freq) 
     if not normal_grouping: 
      for i in range(lastpos): 
       pass 
     else: 
      while True: 
       subset = data[i:freq] 
       #print subset 
       firstrow = subset[0] 
       lastrow = subset[-1] 
       output.append((firstrow[0], firstrow[1], lastrow[2])) 
       i += freq 
       if i >= lastpos: 
        break 
     return output 
    else: 
     return data 

は、ここにブートにいくつかのサンプルデータです:私はそれを実行したときに

>>> a =[] 
>>> a.append(range(0,5)) 
>>> a.append(range(5,10)) 
>>> a.append(range(10,15)) 
>>> a.append(range(15,20)) 
>>> a.append(range(20,25)) 
>>> a.append(range(25,30)) 
>>> a.append(range(30,35)) 
ここ

は結果である:

>>> b = group_ldata(a,2) 
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] 
[] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 11, in group_ldata 
IndexError: list index out of range 

誰が何を見つけることができますエラーが発生していますか?

答えて

2

あなたは何をしようとしているのですか?しかし、エラーの理由は明らかです。

最初はi=0です。 その後、while Trueループの後で、i += freqを実行します。だから、私はequals freq。

while Trueループが再び実行されると(2回目の反復)、subset = data[i:freq]行で、サブセットは長さ0のリストと等しくなります。その最初の要素にアクセスしようとしています。意味がありますか?

+0

ビンゴ!私はそれがそんなに愚かなものになることは分かっていた。上限はi + freqでなければなりません。 –

関連する問題