这是一段令人尴尬的代码之一,只需要第二双眼睛来发现“明显”的错误。我正在处理一个列表列表,由于某种原因,我正在点击“列表索引超出范围”erorr - 尽管在屏幕上窥视了一段时间,但我无法发现它。
以下是摘录:
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
有人能发现造成错误的原因吗?
答案 0 :(得分:2)
我不确定你要做什么。但是,错误的原因是显而易见的。
一开始,你做i=0
。
然后,在while True
循环的后面,您执行i += freq
。所以,现在我equals
频率。
现在,当while True
循环再次运行(第二次迭代)时,在行subset = data[i:freq]
中,子集将等于长度为0的列表。并且您正在尝试访问第一个元素那。有意义吗?