イテレータを特定の値で停止し、その値まで状態を保存し、保存された状態と元の状態の両方を返す次のコードがあります。私は与えられたbreak_pointまでの値を取得するためにitertoolsからtakewhile使用していますが、その後、私はそれらをマージするbreak_pointと初期イテレータまで保存されたイテレータにチェーンを使用します。最後に、itertools内のtakewhileが1つの値をとりすぎる
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つの値を逃し、ブレークポイント自体に等しい値を見逃しているため、似ていません。助けてください。それはtakewhile
でそれらの上に反復して
break_point-1から "-1"を削除しようとするか、 "<="の代わりに "<"を実行してください –
'takewhile'がiteratingを停止しても、条件に合う?もちろん、ブレークポイントはイテレータから消費されました。つまり、 'takewhile'が停止しました! –