如何修复Python中的“索引超出范围”错误?

时间:2019-05-27 22:37:27

标签: python

我想编写一个辅助函数,该函数对0和li [-1]之间的每个整数的出现进行计数,说li是一个有序列表。

我看不到我的错误...我知道这种错误消息的含义,但是我不知道变量j在哪里达到极限。

def aux_compter_occurence(li):
    resu = [0] * (li[-1]+1)
    i = 0
    j = 0
    while i < (li[-1] + 1):
        while li[j] == i:
            resu[i] += 1
            j +=1
        i += 1
    return resu

例如,使用输入[2,4,4,4,7,8,8],输出应为[0,0,1,0,3,0,0,1,2]

2 个答案:

答案 0 :(得分:0)

我在您的代码中添加了“ j

def aux_compter_occurence(li):
    resu = [0] * (li[-1]+1)
    i = 0
    j = 0
    while i < (li[-1] + 1):
        while j < len(li) and li[j] == i:
            resu[i] += 1
            j +=1
        i += 1
    return resu

答案 1 :(得分:-1)

collections.Counter可以传递一个可迭代的值,并将计算每次发生的次数,然后我们可以使用简单的理解来生成结果

import collections

def aux_compter_occurence(li):
    counts = collections.Counter(li)
    return [counts.get(i, 0) for i in range(li[-1] + 1)]

或者,如果您希望使用以前的方法来递增列表中的值,则您已经知道列表中的索引,因为它等于整数值。我们可以简化很多

def aux_compter_occurence(li):
    resu = [0] * (li[-1] + 1)
    for i in li:
        resu[i] += 1
    return resu