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

Divide elements of a list by integer with list comprehension: index out of range

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

再次索引它

问题在于:

  [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] 不会为您提供所有值的平均值。它将 "only" 将它们中的每一个除以 100。

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

results[x]

x已经是数组中的值,即随机整数。你得到 IndexError 因为 results[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 是那里的值而不是索引)