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 需要查看该值才能知道条件不再满足。