遍历列表收益

问题描述

我正在尝试创建一种遍历列表并返回下一个元素的方法

那是我的清单:

[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',...? 谢谢你

解决方法

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

用于返回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,7]
[10,30]
,

使用yield编写函数时,调用该函数不会返回该值。它返回一种特殊类型的对象generator。要打印出generator的所有值,您将不得不使用for对其进行循环或将其拉入{ {1}}或list
打印代码:

tuple

此外,在函数中调用firstCall = C.iterDenominations() print(list(firstCall)) secondCall = C.iterDenominations() print(list(secondCall)) 也不是一个好习惯,也不能为您提供所有元素。更加Python化的方式是这样的:

__next__

或者简单地

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