我有以下代码来停止某个值上的迭代器,保存状态直到该值并返回保存状态和原始状态。我从itertools使用takewhile来获取值直到给定的break_point,然后我在保存的迭代器上使用链,直到break_point和初始迭代器合并它们:
from itertools import takewhile, chain
def iter_break(iterator_input, break_point):
new_iter = list(takewhile(lambda x: x <= break_point-1, iterator_input))
return chain(iter(new_iter), iterator_input)
import unittest
class TestEqual(unittest.TestCase):
def test_iters(self):
it = iter(range(20))
old_it = iter_break(it, 10)
self.assertEqual(list(it), list(old_it))
if __name__ == '__main__':
unittest.main()
问题是,最后返回的迭代器和我返回的完整迭代器不相似,因为返回的迭代器错过了一个值,并且它错过了等于断点本身的值。请帮忙。
答案 0 :(得分:3)
it
不仅缺少断点值,它还缺少它之前的所有值,因为它只是用iter
而不是列表创建的迭代器,因此{ {1}}在使用iter_sample
对其进行迭代时会使用值。这包括断点本身,因为takewhile
需要查看该值才能知道条件不再满足。