简单列表处理函数中的IndexError - 我缺少什么?

时间:2012-02-12 14:08:46

标签: python

这是一段令人尴尬的代码之一,只需要第二双眼睛来发现“明显”的错误。我正在处理一个列表列表,由于某种原因,我正在点击“列表索引超出范围”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

有人能发现造成错误的原因吗?

1 个答案:

答案 0 :(得分:2)

我不确定你要做什么。但是,错误的原因是显而易见的。

一开始,你做i=0。 然后,在while True循环的后面,您执行i += freq。所以,现在我equals频率。

现在,当while True循环再次运行(第二次迭代)时,在行subset = data[i:freq]中,子集将等于长度为0的列表。并且您正在尝试访问第一个元素那。有意义吗?