【问题标题】:Python 'TypeError': 'Generator' object is not subscriptablePython 'TypeError':'Generator' 对象不可下标
【发布时间】:2014-09-07 19:39:34
【问题描述】:

我正在尝试在 Python 中执行一个简单的 Euclid 示例,但收到标题中提到的错误。代码如下:

定义 gcd1(a,b): """ 欧几里得算法 """ 而一个: a, b = b%a, a 返回 b

我将代码调用如下(我认为这可能与它有关):

对于 set1 中的 x: 打印(gcd1(x,set2[x]))

编辑:当前情况(有效)

set1 = 列表(范围(开始,结束)) """ otherrange() 的行为就像 range() 但是返回一个固定列表""" set2 = 列表(其他范围(开始,结束)) 对于 set1 中的 x: 打印(gcd1(x,set2[x]))

【问题讨论】:

  • 你能告诉我们哪一行有错误,set2 是什么?
  • 这里的otherrange() 是什么?
  • 只是范围与其他参数
  • @Ropstah: Python 中的range() 不是生成器,但您的问题表明您确实 有这样的对象。请给我们一些东西,让我们重现问题。只有这样,我们才能为您提供最佳的解决方案,而不仅仅是使用list() 膏药。
  • @MartijnPieters:otherrange 是一种自定义方法,它基本上返回一个数字列表。而我的其余实现可以从优化中受益匪浅,我的问题在这里得到了回答。我很乐意继续讨论这个问题。

标签: python euclidean-distance


【解决方案1】:

这意味着set2 是一个生成器,要解决这个问题,只需将它变成一个列表。

set2_list = list(set2)
for x in set1:
    print(gcd1(x, set2_list[x]))

【讨论】:

  • @Ropstah 等一下,我之前放的内容可能无法按预期工作。使用我更新的答案。
  • 我已经使用了变量,但那些指向函数。我只是简单地将所有内容都包含在一个列表中,所以一切都很好(对吗?)
  • @Ropstah 是的,我想是的
猜你喜欢
  • 1970-01-01
  • 2021-12-14
  • 2023-03-20
  • 2015-07-31
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多