“‘生成器’对象不可下标”错误

2024-01-11

当我尝试解决 Project Euler Problem 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

Your xvalue 是一个生成器对象,它是一个Iterator https://docs.python.org/3/library/collections.abc.html#collections.abc.Iterator:它按顺序生成值,因为它们是由a请求的for循环或通过调用next(x) https://docs.python.org/3/library/functions.html#next.

您正在尝试像访问列表或其他内容一样访问它Sequence https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence类型,它允许您通过索引访问任意元素:x[p + 1].

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

x = list(x)

这可以解决您的问题,并且适用于大多数情况。但是,这需要立即生成并保存所有值,因此如果您正在处理极长或无限的值列表,或者值非常大,则可能会失败。

如果您只需要生成器中的单个值,您可以使用itertools.islice(x, p) https://docs.python.org/3/library/itertools.html#itertools.islice丢弃第一个p值,那么next(...)拿走你需要的那个。这样就无需在内存中保存多个项目或计算超出您要查找的值的值。

import itertools

result = next(itertools.islice(x, p))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“‘生成器’对象不可下标”错误 的相关文章

随机推荐