迭代由方法产生的列表,一次迭代一个元素[Closed]

vof42yt1  于 2022-10-02  发布在  Python
关注(0)|答案(3)|浏览(116)

已关闭。此问题需要details or clarity。它目前不接受答案。

**想要改进这个问题吗?**添加细节,并在editing this post之前澄清问题。

一年前就关闭了。
这篇文章是在2小时前编辑并提交审阅的。
Improve this question

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

这就是列表命名:
[2、5、7、10、25、30、50、70]

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

class SomeClass

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

# much later in the code

C = SomeClass()

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

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

,前两个印刷品是:

<0x000001D413F6DC10处的生成器对象Currency.iterDenomations>

<0x000001D4140E2EB0处的生成器对象Currency.iterDenomations>

这些都不是我所期待的结果。我正在寻找从list Denomings顺序返回的元素,即

第一次呼叫后:[2]

秒呼叫后:[5]

第三次呼叫之后(尚未成文):[7]等。

Pehaps related to this question...

ibps3vxo

ibps3vxo1#

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

m0rkklqb2#

用于返回3个Next元素的简单类:

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]
6kkfgxo0

6kkfgxo03#

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

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

此外,在您的函数中调用__next__也不是一种好的做法,它也不会给您提供所有元素。更典型的做法是这样做:

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

或者干脆

def iterDenominations(self):
    return self.listDenominations

相关问题