【问题标题】:Iterating over a list (yield) [closed]迭代列表(产量)[关闭]
【发布时间】:2021-02-14 04:38:45
【问题描述】:

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

这是我的清单:

[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)

,前两个打印是:

我应该怎么做才能在 firstCall 和 secondCall 变量中包含 '2'、'5'、'7'、...? 谢谢你

【问题讨论】:

  • 不要使用__next__(),而是调用next()内置函数
  • 您希望firstCall 为2,secondCall 为5?
  • 谢谢大家,你们帮了我很多:)

标签: python list iteration yield


【解决方案1】:
iterable = iter(self.listDenominations)
for item in iterable:
    yield item

yield from iterable

调用生成器函数将创建一个生成器,它不会从生成器返回值。因此,您创建生成器,然后在其上调用 next(或对其进行迭代)

denominations = c.iterDenominations()  # make the generator
first_call = next(denominations)
second_call = next(denomination)
rest = list(denominations)
print(first_call, second_call, rest)

【讨论】:

    【解决方案2】:

    返回 3 个下一个元素的简单类:

    class IterDenominations(object):
        def __init__(self, numbers):
            self.iterator = iter(numbers)
    
        def next(self):
            print([next(self.iterator), next(self.iterator), next(self.iterator)])
    

    测试:

    ids = IterDenominations([2, 5, 7, 10, 25, 30, 50, 70])
    ids.next()
    ids.next()
    

    输出:

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

    【讨论】:

      【解决方案3】:

      当您使用yield 编写函数时,调用它不会返回该值。它返回一种特殊类型的对象,称为generator。要打印出generator 的所有值,您必须使用for 对其进行循环,或者将其拉入listtuple .
      打印代码:

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

      另外,在你的函数中调用__next__ 不是一个好习惯,它也不会给你所有的元素。更 Pythonic 的方式是这样的:

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

      或者干脆

      def iterDenominations(self):
          return self.listDenominations
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-27
        • 1970-01-01
        • 2014-03-17
        • 2021-05-02
        • 1970-01-01
        • 2021-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多