2012-02-12 5 views
0

"명백한"실수를 찾아내는 데 두 번째 눈 쌍이 필요한 코드 조각 중 하나입니다. 나는리스트의리스트를 처리하고 있는데, 어떤 이유에서,리스트 인덱스가 범위를 벗어났다. 나는 잠시 동안 화면을 보면서 그것을 발견 할 수 없다.간단한 목록 처리 기능의 IndexError - 무엇이 누락 되었습니까?

>>> 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 

사람이 무엇을 발견 할 수 : 여기

>>> 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)) 

내가 그것을 실행하면 결과입니다 : 여기
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 

부팅에 일부 샘플 데이터입니다 : 여기

은 조각이다 오류가 발생 했습니까?

답변

2

나는 무엇을 하려는지 확실하지 않습니다. 그러나 오류의 원인은 분명합니다.

처음에는 i=0입니다. 그런 다음 나중에 while True 루프에서 i += freq을 수행합니다. 자, 이제 나는 equals 주파수.

이제 루프가 다시 실행되면 (두 번째 반복) 라인 subset = data[i:freq]에서 하위 집합은 길이가 0 인 목록과 같습니다. 그러면 그 첫 번째 요소에 액세스하려고합니다. 말이된다?

+0

빙고! 나는 그것이 어리석은 무엇인가 일 것이다라는 것을 알고 있었다 - 꽤 발견했다!. 상한은 i + freq 여야합니다. –

관련 문제