在itertools中占用一个值太多了

时间:2016-05-30 17:39:31

标签: python python-2.7 itertools

我有以下代码来停止某个值上的迭代器,保存状态直到该值并返回保存状态和原始状态。我从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()

问题是,最后返回的迭代器和我返回的完整迭代器不相似,因为返回的迭代器错过了一个值,并且它错过了等于断点本身的值。请帮忙。

1 个答案:

答案 0 :(得分:3)

it不仅缺少断点值,它还缺少它之前的所有值,因为它只是用iter而不是列表创建的迭代器,因此{ {1}}在使用iter_sample对其进行迭代时会使用值。这包括断点本身,因为takewhile需要查看该值才能知道条件不再满足。