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

Python

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

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

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

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

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

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

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

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

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

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

profile_icon

【Python歴】10年 x 【営業マン歴】11年

HP作成、社内システムの構築、コンサルティング

Pythonベースのフレームワーク 「Django」を使って下記のようなサイトを作っています!

日報アプリ
当ブログで一から開発方法を解説している日報アプリ(デモ版)です
ツールアプリ
当ブログで紹介したPythonアプリのWeb版です。DjangoAPIとReactで開発。随時更新中です。

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安の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メソッド」で確認の上、試してみることをオススメします

Pythonでホームページが作れるのをご存知でしょうか?

当ブログでは、PythonをベースとしたDjangoフレームワークを使って一からホームページを作成、公開するまでを解説しているブログになります

最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます

https://nippo.itc-app.site/
ようこそ!簡易日報アプリ「D-Repo」へ!こちらは無料で使える日報アプリのデモサイトになります!「Webアプリはとてもカンタンで便利!」を感じてみよう!

興味のある方はシリーズの記事が一覧となっている↓のページをご覧ください

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました