pythonの便利ライブラリitertools.
その中のdropwhile
とtakewhile
を使うときのメモ.
iteratorの例
100本ノック10章91で用いている単語アナロジー評価データを例に考えます。
このデータ中で": "で始まる行はセクション名を表す.例えば,": capital-common-countries"という行は,"capital-common-countries"というセクションの開始を表している.
dropwhile
条件がtrueの間無視(drop)して,falseになった場所からはじめる. 条件はlambda式を使う。
例えばfamily
というセクション以降のデータが欲しい時は下のようになる。
dropwhile(lambda x: x != ': family\n', f)
takewhile
条件がtrueの間に続けて,falseになったら終了.
例えばfamily
というセクションより前のデータだけ取得する時は下のようになる。
takewhile(lambda y: y == ': family\n', f)
合わせ技
: family
以前は無視して、次の:
になったら終了.
takewhile(lambda y: y == ': family\n' or not y.startswith(':'), dropwhile(lambda x: x != ': family\n', f)):