3

我正在尝试通过列表理解将填充有整数的列表的所有元素除以另一个整数(功能类似于 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)

这就像一个魅力。

但是,在我看来,这两种方法应该会产生相同的结果,所以我完全不知道为什么它不起作用。

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

4

5 回答 5

3

问题在于:

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

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

 [x / 100 for x in results]

换句话说 - 列表理解的“for ... in ...”部分适用于列表中的值,而不是它们的索引。

顺便说一句,你[x / 100 for x in results]不会给你所有值的平均值。它将“仅”将它们中的每一个除以 100。

于 2017-12-15T08:18:05.063 回答
1

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

average_results = [x / 100 for x in results]

x已经是值形式了results。不要再用results[x].

于 2017-12-15T08:17:42.573 回答
1

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

results[x]

x已经是数组中的值,即随机整数。例如,您会得到IndexError因为results[29999]是那里可能的调用之一。

相反,您想要的是不用x作索引:

average_results = [x / 100 for x in results]
于 2017-12-15T08:19:37.813 回答
0

您可以在最后使用其中之一:

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

问题是您正在尝试访问不存在的索引(x 是那里的值而不是索引)

于 2017-12-15T08:28:48.263 回答
-1

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

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

In [2]: [_/10 for _ in results]
Out[2]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
于 2017-12-15T08:19:55.993 回答