【问题标题】:Iterating (yield) over a list在列表上迭代(屈服)
【发布时间】:2023-03-16 06:36:01
【问题描述】:

我正在尝试创建一个迭代列表并返回下一个元素的方法。

这是我的清单:

[2, 5, 7, 10, 25, 30, 50, 70]

这就是我正在研究的方法:

    def iterDenominations(self):
        it = iter(self.listDenominations)
        yield it.__next__()

当我调用方法并打印结果时

firstCall = C.iterDenominations()
print(firstCall)
secondCall = C.iterDenominations()
print(secondCall)

,前两个打印是:

我应该怎么做才能打印“2”、“5”、“7”……? 谢谢你

【问题讨论】:

  • 不要使用dunder方法__xxxxx__(...)。为什么不yield from self.listDenominations
  • 请用调用代码更新问题。

标签: python list iteration yield


【解决方案1】:

yield 总是创建一个新的生成器。 iterDenominations 不返回 self.listDenominations 的下一个/第一个元素;它返回一个生成该单个元素的生成。

如果你想创建自己的迭代器,你可以用 with 来做

def iterDenominations(self):
    it = iter(self.listDenominations)
    for x in it:
        yield x

更短的方式

def iterDenominations(self):
    for x in self.listDenominations:
        yield x

或者更短的方式:

def iterDenominations(self):
    yield from self.listDenominations

或最短路径

def iterDenominations(self):
    return iter(self.listDenominations)

(好吧,这实际上长了两个字符。但它可能看起来更熟悉。)

【讨论】:

  • 谢谢。我想使用迭代器保存单个下一个元素。我不知道这是否是正确的定义,对不起,我是python新手
  • @goalpang 你的意思是你想将产生的元素存储在一个变量中并产生它?
  • @OlivierMelançon 我想是的。我想在 firstCall 变量中有 2 个,在 secondCall 变量中有 5 个,依此类推
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多