用列表推导除以整数列表的元素:索引超出范围

时间:2017-12-15 08:12:23

标签: python list list-comprehension index-error

我试图通过列表推导将填充了整数的列表的所有元素除以另一个整数(像numpy数组中的功能),如下所示:

results = 300 * [0]
for i in range(100):
    for j in range(300):
        results[j] += random.randrange(0,300)
average_results = [results[x] / 100 for x in results]

但是,如果我在Python中运行它,它会抛出一个

IndexError: list index out of range

我通过使用常规for循环解决了这个问题:

average_results = []
for x in results:
    average_results.append(x/100)

就像魅力一样。

然而,在我看来,这两种方法应该产生相同的结果,所以我完全发现它为什么不起作用。

有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:3)

问题在于:

  [results[x] / 100 for x in results]

您在此处迭代结果列表中的for x in results)。然后为每个人尝试使用此索引访问元素。 你的意思是:

 [x / 100 for x in results]

换句话说 - " for ... in ..."列表理解的一部分与列表中的值一起使用,而不是它们的索引。

BTW ,您的[x / 100 for x in results]赢得了所有值的平均值。它只会"取每一个并除以100。

答案 1 :(得分:1)

这是对循环的等效列表理解:

average_results = [x / 100 for x in results]

x已经是results的价值形式。请勿使用results[x]再次将其编入索引。

答案 2 :(得分:1)

您的数组中填充了随机整数值,范围从0到29999.在您的列表理解中,据我所知,这里有一个错误:

results[x]

x已经是数组中的值,即随机整数。您得到IndexError,因为results[29999]例如是其中一个可能的来电。

您想要的是不要将x用作索引:

average_results = [x / 100 for x in results]

答案 3 :(得分:0)

你可以在最后使用其中一个:

1. average_results = [results[x] / 100 for x in range(len(results))]
2. average_results = [x / 100 for x in results]

问题是你是否试图访问不存在的索引(x是那里没有索引的值)

答案 4 :(得分:-1)

这应该是直截了当的。

In [1]: results = 10 * [10]

In [2]: [_/10 for _ in results]
Out[2]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]