gpt4 book ai didi

Python:创建一个可以循环迭代的类

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:00 33 4
gpt4 key购买 nike

我想在 Python 中创建一个行为类似于列表但可以循环迭代的类用例示例:

myc = SimpleCircle()
print(len(myc))
j = iter(myc)
for i in range (0, 5):
print(next(j))

它会打印AbCd一个

到目前为止我试过的代码是下面的我知道问题出在我的 __next__

方法顺便说一下,它似乎被忽略了,即使我不实现它,我也可以使用 next

class SimpleCircle:
def __init__(self):
self._circle = ['a', 'b', 'c', 'd']
self._l = iter(self._circle)


def __len__(self):
return len(self._circle)

def __iter__(self):
return (elem for elem in self._circle)

def __next__(self):
try:
elem = next(self._l)
idx = self._circle.index(elem)
if idx < len(self._circle):
return elem
else:
return self._circle[0]
except StopIteration:
pass

最佳答案

这是一个基本的非 itertools 实现:

class CyclicIterable:
def __init__(self, data):
self._data = list(data)

def __iter__(self):
while True:
yield from self._data

cycle = CyclicIterable(['a', 'b', 'c', 'd'])
for i, x in zip(range(5), cycle):
print(x)

请注意,没有必要实现 __next__,因为 Cycle 类本身就像 list 一样, 不是迭代器。 要明确地从中得到一个迭代器,您可以这样写:

it = cycle.__iter__()
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

当然,您可以实例化任意数量的迭代器。

关于Python:创建一个可以循环迭代的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135348/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com