在尝试解决项目Euler问题11时,为什么我会从我的代码的第5行中遇到此错误?

for x in matrix:
    p = 0
    for y in x:
        if p < 17:
            currentProduct = int(y) * int(x[p + 1]) * int(x[p + 2]) * int(x[p + 3])
            if currentProduct > highestProduct:
                print(currentProduct)
                highestProduct = currentProduct
        else:
                break
            p += 1

'generator' object is not subscriptable

答案

你的x值是一个发电机对象,它是Iterator:它按顺序生成值,因为它们是由for循环或致电next(x)

您正在尝试访问它,就像它是列表或其他Sequence类型,它允许您通过索引访问任意元素,如下所示x[p + 1]

如果您想按索引查找生成器输出中的值,您可能需要将其转换为列表:

x = list(x)

这可以解决您的问题,并且适用于大多数情况。

如果您只需要生成器中的单个值,您可以使用itertools.islice(x, p)丢弃第一个p值,那么next(...) to take the one you need. This eliminate the need to hold multiple items in memory or compute values beyond the one you’re looking for.

import itertools

result = next(itertools.islice(x, p))

来自: stackoverflow.com