Python Error IndexError:列表赋值索引超出范围

时间:2015-03-23 06:29:27

标签: python list indexing range variable-assignment

这是我的功能代码:

    import random

    def generate(n):

        res = [0]
        x = [0]
        while x == 0:
            x[0] = random.randint(0, 9)
            res = res[0].append(x[0])
        for i in range(1, n - 1):
            x[i] = random.randint(0, 9)
            res[i] = res[i].append(x[i])
        return res

主程序代码:

    import number
    n = 20
    f = number.generate(n)
    s = []
    s = number.counter()
    print("{0}" .format(s))

当我运行程序时,我得到:

   Traceback (most recent call last):
   f = number.generate(n)
   x[i] = random.randint(0, 9)
   IndexError: list assignment index out of range

你能告诉我如何解决这个问题吗?谢谢:))

4 个答案:

答案 0 :(得分:3)

出现此错误的原因是您正在访问仅指定了x [0]的x [0到n]。该列表只有一个索引,您正在访问更高的索引。这就是为什么你的列表索引超出范围。

使用此功能生成随机数列表。

def generate(n):
    return [random.randint(0,9) for i in range(n)]

答案 1 :(得分:2)

您初始化两个大小为1的列表。然后,当您尝试访问索引为1的元素时,会出现索引错误。

首先尝试:

import random
def generate(n):
    x = [random.randint(1, 9)] + [random.randint(0, 9) for _ in range(n-1)]
    return x

答案 2 :(得分:1)

使用append方法添加到列表中。

x.append(val-to-add-to-list)

for i in range(1, n - 1): 
    x.append (random.randint(0, 9)) 
    res.append(x[i]) 

return res

答案 3 :(得分:1)

您的x是一个只有一个元素的列表,即0。

在此行中:x[i] = random.randint(0, 9)您的第一个i等于1,因此您已超出范围。