在尝试解决项目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))