【发布时间】:2017-03-10 21:09:13
【问题描述】:
class Ordered:
def __init__(self,aset):
self.aset = aset
def __iter__(self):
for v in sorted(self.aset): # iterate over list of values returned by sorted
yield v
函数接受一个集合并返回一个列表
集合总是
s = {1, 2, 4, 8, 16}
例如:
s = {1, 2, 4, 8, 16}
i = iter(Ordered(s))
print(next(i))
print(next(i))
s.remove(8)
print(next(i))
s.add(32)
print(next(i))
print(next(i))
it should prints 1 2 4 16 32
但是当我的函数需要时
[next(i), next(i), s.remove(8), next(i), next(i), s.add(32), next(i)]
应该打印出来
[1, 2, None, 4, 16, None, 32]
但是,它会打印:
[1, 2, None, 4, 8, None, 16]
谁能告诉我如何解决它?谢谢
我在下面发布了我遇到的错误以帮助理解:
39 *Error: Failed [next(i), next(i), s.remove(8), next(i), next(i), s.add(32), next(i)] == [1, 2, None, 4, 16, None, 32]
evaluated: [1, 2, None, 4, 8, None, 16] == [1, 2, None, 4, 16, None, 32]
42 *Error: [next(i), next(i), next(i), s.add(3), next(i), s.add(10), s.add(32), next(i), next(i), next(i)] raised exception; unevaluated: [1, 2, 4, None, 8, None, None, 10, 16, 32]
46 *Error: Failed [next(i), s.remove(2), s.remove(4), s.remove(8), next(i)] == [1, None, None, None, 16]
evaluated: [1, None, None, None, 2] == [1, None, None, None, 16]
49 *Error: Failed [next(i), s.remove(2), next(i), s.remove(4), s.remove(8), next(i)] == [1, None, 4, None, None, 16]
evaluated: [1, None, 2, None, None, 4] == [1, None, 4, None, None, 16]
【问题讨论】:
-
删除某些内容后,迭代器不再有效。
-
但是我该如何解决呢?
-
谁能帮我解决这个问题?