Я пытаюсь реплицировать python итерацию списка, но в отличие от python списки мой индекс l oop не перезапускается внутри вложенных циклов.
В настоящее время 1-й случай работает, как ожидалось, но второй случай циклов навсегда, поскольку внутренний и внешний l oop оба совместно используют один и тот же myClassObj, а внутренний l oop всегда сбрасывает индекс на начальное значение, поэтому внешний l oop никогда не завершается. Как заставить его вести себя как python встроенные списки?
class MyClass:
"""Iterator for looping over a sequence."""
def __init__(self, seq):
self.data = seq
self.index = -1
def __iter__(self):
return self
def __next__(self):
"""Return the next element, or else raise StopIteration error."""
self.index += 1
if self.index < len(self.data):
return self.data[self.index]
else:
self.index = -1
raise StopIteration()
myClassObj = MyClass('spa')
# Case1: This Works fine:
for i in range(2):
for each in myClassObj:
print(each)
print()
print()
# Case2: This does not work correctly.
for each in myClassObj:
for each1 in myClassObj:
print('{}: {}'.format(each, each1))
print()
Ожидаемое поведение для второго случая:
s: s
s: p
s: a
p: s
p: p
p: a
a: s
a: p
a: a