【Python】 itertoolsでできること 7選|実例付

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2022年1月)

✔このような方へ向けて書かれた記事となります

「itertoolsライブラリについて知りたい!」

「便利だって聞いたけど、初心者の私で大丈夫かな?」

「どんな場面で使うかの実例もあるとわかりやすいんだけど、、、」

✔当記事を通じてお伝えすること

  • 【Python】 itertoolsでできること 7選
  • dirメソッドでできることの一覧を出力してみた

itertoolsを理解することで、既存のリストから処理速度の早いイテレータが生成できるようになります

様々な場面で活躍するitertoolsですが、あまり広く知られていないのも実情です

ぜひここでマスターして、周りのPython学習者よりも一歩先へ進みましょう!

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

【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つについて解説しました

  1. カウンターとして数字を出力する「counter
  2. リストの要素をくっつける「zip_longest
  3. 要素を順番に取り出す「cycle
  4. 繰り返し値を出力する「repeat
  5. 要素による組み合わせ「combinations
  6. 順序による組み合わせ「product
  7. 条件を満たした要素を取り出す「compress

もちろん、その他にもメソッドは用意されています

dirメソッド」で確認の上、試してみることをオススメします

タイトルとURLをコピーしました