【发布时间】:2016-05-30 17:39:30
【问题描述】:
我有以下代码在某个值上停止迭代器,将状态保存到该值并返回保存的状态和原始状态。我正在使用 itertools 中的 takewhile 来获取给定 break_point 之前的值,然后在保存的迭代器上使用 chain 直到 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()
问题是,最终返回的迭代器和我返回的完整迭代器并不相似,因为返回的迭代器错过了一个值,它错过了等于断点本身的值。请帮忙。
【问题讨论】:
-
要么尝试从 break_point-1 中删除“-1”,要么执行“
-
如果
takewhile没有找到不符合条件的元素,您如何期望它停止迭代?当然断点是从迭代器中消耗的,这就是停止takewhile!
标签: python python-2.7 itertools