2016年4月11日

itertools.takewhile() と itertools.dropwhile()

itertoolsライブラリに含まれている itertools.takewhile() と itertools.dropwhile() を紹介します。


itertools.takewhile() と itertools.dropwhile() は似た動作をします。どちらも引数として、条件式と iterableオブジェクトを受け、itertools.takewhile()は「オブジェクトの先頭から条件を満たす要素を取り出す」、itertools.dropwhile()は「オブジェクトの先頭から条件を満たす要素を取り除く」という動作をします。
実際の動作は以下のようになります。

>>> from itertools import takewhile, dropwhile
>>> data = [1, 4, 6, 4, 1]

# takewhileは先頭から条件
# を満たす要素を取り出す
>>> for i in takewhile(lambda x: x < 5, data):
...     print(i)
...
1
4

# dropwhileは先頭から条件
# を満たす要素を取り除く
>>> for i in dropwhile(lambda x: x < 5, data):
...     print(i)
...
6
4
1


以下は str.lstrip() 相当の関数を、itertools.dropwhile() を用いて実装した例です。
>>> def lstrip(s, chars):
...     return ''.join(dropwhile(chars.__contains__, s))
...

>>> lstrip("abcde", "ba")
'cde'

0 件のコメント:

コメントを投稿