Python 使用列表理解将列表元素除以整数:索引超出范围

Python 使用列表理解将列表元素除以整数:索引超出范围,python,list,list-comprehension,index-error,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中运行它,它会抛出一个 IndexEr

我试图用列表理解将一个充满整数的列表的所有元素除以另一个整数(功能类似于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)
这就像一个符咒

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


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

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

average_results = [x / 100 for x in results]
x
已经是值形式
results
。不要用
结果[x]
再次索引到它中问题在于:

  [results[x] / 100 for x in results]
在这里,您正在迭代结果列表中的值(
用于结果中的x
)。然后,对于每个试图使用此索引访问元素的用户。 你的意思是:

 [x / 100 for x in results]
换句话说,列表理解的“for…In…”部分使用列表中的值,而不是它们的索引


顺便说一句,您的
[x/100表示结果中的x]
不会给出所有值的平均值。它将“仅”取它们中的每一个并除以100。

您的数组中填充了从0到29999的随机整数值。据我所知,在你的理解清单中,你犯了一个错误:

results[x]
x
已经是数组中的值,即随机整数。您得到的是
索引器
,因为
结果[29999]
就是其中一个可能的调用

您希望的是不要使用
x
作为索引:

average_results = [x / 100 for x in results]

这应该是直截了当和可能的

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

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

最后,您可以使用以下选项之一:

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

问题是你试图访问一个不存在的索引(x是那里的值而不是索引)

它们求和
randint(0,300)
100次,取平均值。谢谢!简洁、清晰、有益。我当然是指x/300。编辑。