(最終更新月:2022年1月)
✔このような方へ向けて書かれた記事となります
「itertoolsライブラリについて知りたい!」
「便利だって聞いたけど、初心者の私で大丈夫かな?」
「どんな場面で使うかの実例もあるとわかりやすいんだけど、、、」
✔当記事を通じてお伝えすること
- 【Python】 itertoolsでできること 7選
- dirメソッドでできることの一覧を出力してみた
itertoolsを理解することで、既存のリストから処理速度の早いイテレータが生成できるようになります
様々な場面で活躍するitertoolsですが、あまり広く知られていないのも実情です
ぜひここでマスターして、周りのPython学習者よりも一歩先へ進みましょう!
【Python】 itertoolsでできること 7選
まずは、モジュールをインポートしてから7つのメソッドを触っていきましょう!
import itertools
①【カウンター(数字の出力)】count
itertools.count()
>>> counter = itertools.count()
>>> next(counter)
0
>>> next(counter)
1
>>> next(counter)
2
>>> next(counter)
3
next()で出力をし続けます
②【リストの要素をペアにする】zip_longest
itertools.zip_longest(リスト1, リスト2)
>>> data = [10, 15, 20, 25, 30]
>>> people = ['yu', 'kazuchika', 'tetsuya']
>>> score_data = list(itertools.zip_longest(people, data))
>>> print(score_data)
[('yu', 10), ('kazuchika', 15), ('tetsuya', 20), (None, 25), (None, 30)]
長い方のリストに合わせて同オフセットの要素がペアとなります
要素が見つからない箇所には、「None」となります
③【要素を順番に取り出す】cycle
itertools.cycle((要素1, 要素2,,,,))
>>> cycle_counter = itertools.cycle(("On", "Off"))
>>> print(next(cycle_counter))
On
>>> print(next(cycle_counter))
Off
>>> print(next(cycle_counter))
On
>>> print(next(cycle_counter))
Off
>>> print(next(cycle_counter))
On
要素が順番に取り出されます
④【繰り返し】repeat
itertools.repeat(値, times=頻度)
>>> repeat_counter = itertools.repeat("こんにちは!", times=4)
>>> print(next(repeat_counter))
こんにちは!
>>> print(next(repeat_counter))
こんにちは!
>>> print(next(repeat_counter))
こんにちは!
>>> print(next(repeat_counter))
こんにちは!
4回まではリピートされますが、指定の回数を超えると、
>>> print(next(repeat_counter))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
StopiIerationエラーが発生します
⑤【組み合わせ(要素で判断)】combinations
itertools.combinations(リスト, 組み合わせの数)
>>> numbers = [1,2,3,4]
>>> pairs = itertools.combinations(numbers, 2)
>>> for pair in pairs:
... print(pair)
...
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
combinationsでは、順番は問わず、要素が同じであるものは省かれます
⑥【組み合わせ(順序で判断)】product
itertools.product(リスト, 組み合わせの数)
>>> numbers = [1,2,3,4]
>>> products = itertools.product(numbers, repeat=2)
>>> for product in products:
... print(product)
...
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
(4, 4)
順番が違えば、別のペアだと判断されます
⑦【条件を満たした要素を取り出す】compress
itertools.compress(リスト, 条件)
>>> teams = ["barca", "liverpool", "realmadrid", "munich"]
>>> selectors = [True, True, False, False]
>>> teams_I_like = itertools.compress(teams, selectors)
>>> for team in teams_I_like:
... print(team)
...
barca
liverpool
条件を満たす(True)オフセットの要素だけ取り出しています
dirメソッドでできることの一覧を出力してみた
属性の一覧を取得するために「dirメソッド」を使ってみよう!
import itertools
print(dir(itertools))
【出力結果】
['__doc__', '__loader__', '__name__', '__package__', '__spec__', '_grouper', '_tee', '_tee_dataobject', 'accumulate', 'chain', 'combinations', 'combinations_with_replacement', 'compress', 'count', 'cycle', 'dropwhile', 'filterfalse', 'groupby', 'islice', 'permutations', 'product', 'repeat', 'starmap', 'takewhile', 'tee', 'zip_longest']
これらがitertoolsで使えるメソッド、属性になります
気になるものがあれば試してみよう!
まとめ
当記事を通じて、主にitertoolsのメソッド7つについて解説しました
- カウンターとして数字を出力する「counter」
- リストの要素をくっつける「zip_longest」
- 要素を順番に取り出す「cycle」
- 繰り返し値を出力する「repeat」
- 要素による組み合わせ「combinations」
- 順序による組み合わせ「product」
- 条件を満たした要素を取り出す「compress」
もちろん、その他にもメソッドは用意されています
「dirメソッド」で確認の上、試してみることをオススメします