itertools 中的 takewhile 取一个值过多
takewhile in itertools takes one value too much
我有以下代码在某个值上停止迭代器,保存状态直到值和 return 保存的状态和原始状态。我正在使用 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()
问题是,最终 returned 迭代器和我 returning 的完整迭代器并不相似,因为 returned 一个缺少一个值,并且它错过等于断点本身的值。请帮忙。
it
不仅缺少断点值,它还缺少它之前的所有值,因为它只是用 iter
创建的迭代器而不是列表,所以 iter_sample
用完了使用 takewhile
遍历它们时的值。这包括断点本身,因为 takewhile
需要查看该值才能知道条件不再满足。
我有以下代码在某个值上停止迭代器,保存状态直到值和 return 保存的状态和原始状态。我正在使用 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()
问题是,最终 returned 迭代器和我 returning 的完整迭代器并不相似,因为 returned 一个缺少一个值,并且它错过等于断点本身的值。请帮忙。
it
不仅缺少断点值,它还缺少它之前的所有值,因为它只是用 iter
创建的迭代器而不是列表,所以 iter_sample
用完了使用 takewhile
遍历它们时的值。这包括断点本身,因为 takewhile
需要查看该值才能知道条件不再满足。