pythonのitertoolsモジュールで面倒な反復処理も簡単に

  • 2018年9月4日
  • 2020年4月29日
  • Python
Pythonを独学で学びたい方は、UdemyのPythonコースがおすすめです。シリコンバレーの一流エンジニアが約300の動画を使って、Pythonを網羅的に教えてくれます。プログラミングスクールの10分の1以下の値段で学べるので、コスパも良しです。
※さらに30日間返金保証ありなので、実質リスクゼロ。
Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

 

 

突然ですがpythonのitertoolsというものを聞いたことがあるでしょうか?

非常に便利なモジュールですが実際のところ初学者にはあまり知られていないものでもあります。

この記事をざっと一読するだけで、itertoolsというのがどのようなものなのか理解できるようにしたので是非読み進めてください!

 

 

スポンサーリンク

itertoolsとは?

それでは、itertoolsとは何でしょうか。

このモジュールは イテレータ を構築する部品を実装しています。
参照:Python公式ドキュメント

別の言い方をすると、itertoolsモジュールの中には、色々なイテレータ関数が入っているよってことです。

よく分からない人は、itertools内の関数を使えば、めんどくさい繰り返し処理も簡単にできるようになるという風に考えておいてください。

itertoolsは高速で、メモリ効率に優れている上に、様々な関数が含まれているので、効率の良いループ処理を記述することができます。

 

 

itertoolsの使い方

それではitertoolsをどんなところで使うのか見ていきましょう。以下で例を2つ程挙げていきます。

ちなみにitertoolsを使う際は事前に以下のようにモジュールをインポートしておいてください。

import itertools

 

 

スポンサーリンク

for文と一緒に使う

itertools内にある関数はイテレータなので、range関数のようにfor文と一緒に使うことができます。

range関数については以下の記事で詳しく解説してるので分からない人は参考にしてください。

【初心者必見】pythonにおけるrange関数の具体的使い方

 

それではどのようにfor文と一緒に使うのか例を見ていきましょう。

 

for i in itertools.chain([1,2],[3,4],[5,6]):
    print(i)
#以下出力
1
2
3
4
5
6

inの後でitertoolsモジュールのchain関数を使っています。

chain関数では引数(かっこの中身)に複数のイテラブルオブジェクト(リストや辞書のように反復処理が可能なもの)をとり、前から順番に要素を返していきます。

上の例ではまずリスト[1,2]から1、2が取り出され、次にリスト[3,4]から3、4が取り出され..という感じで順番に出力されています。

 

list関数でリストを作る

list関数を使用すると、引数にとった文字列や辞書などのシーケンス型オブジェクトをリストに変換してくれます。

これはitertools内の関数にも使えます。以下で例を見ていきましょう。

 

>>>list(itertools.chain([1,2],[3,4]))
[1, 2, 3, 4]

list関数の引数に上の例でも出てきたchain関数を使いました。1、2、3、4のリストができてるのが分かるはずです。

 

スポンサーリンク

itertools内にある主な関数

itertools内には効率的に繰り返し処理を行えるようにしてくれる便利な関数がいっぱいあります。

以下ではそれらの関数の一部を紹介していきます。

 

permutations関数で順列を作る

permutations関数を使うと、順列を作ることができます。

順列とは異なるn個の中からr個選んで並べる場合の数です。

以下で例を見ていきましょう。

 

numbers = [1, 2, 3, 4]
for i,j in itertools.permutations(numbers,2):
    print(i,j)
#以下は出力
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3

まず、リストnumbersには異なる4個の整数が入っています。

permutations関数の第1引数ではこのリスト名を、第2引数では第1引数でとったリストから要素をいくつ選び出すか指定しています。

上の例では2を指定しているので4個の要素から2個選び出して並べる場合の数になり、12通りが出力されています。

 

combinations関数で組み合わせを作る

次にcombinations関数を使って、組み合わせを考えていきましょう。

組み合わせとは異なるn個の中からr個選ぶ場合の数です。順列とは違って順番を考えません。

 

例えば順列の場合、(1,2)と(2,1)は別物ですが、組み合わせの場合は順番を考えないので同じものになります。

以下で例を見ていきましょう。

 

numbers = [1, 2, 3, 4]
for i,j in itertools.combinations(numbers,2):
    print(i,j)

#以下は出力
1 2
1 3
1 4
2 3
2 4
3 4

combinations関数の基本的な使い方はpermutations関数と同じです。

numbersの4個の要素から2個を選んび、iとjに入れて出力しています。

 

product関数で全ての要素の組み合わせを作る

最後にproduct関数について見ていきましょう。

product関数では引数にリストなどをとり、それぞれのリストから1つずつ要素を選び出す組み合わせを考えます。

以下で例を見ていきましょう。

 

numbers = [1, 2, 3, 4]
characters = ['a', 'b', 'c']
for i,j in itertools.product(numbers,characters):
    print(i,j)

#以下は出力
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c
4 a
4 b
4 c

numbersとcharactersという2つのリストを作り、これらをproduct関数の引数にします。

すると、それぞれのリストから1つずつ要素が取り出されて、その組み合わせが全て出力されています。

 

まとめ

今回はitertoolsモジュールについて、その使い方を学んでいきました。

モジュール内のイテレータ関数についてもいくつか例を挙げて見てもらいました。

他にもitertoolsモジュール内には色々と便利なイテレータ関数が実装されているので是非調べてみてください。

 

今後も定期的にコンピュータ系の記事を発信していくので是非、興味のある人はブックマークして見にきてくれると嬉しいです!!

 

 

Pythonを独学で学びたい方は、UdemyのPythonコースがおすすめです。シリコンバレーの一流エンジニアが約300の動画を使って、Pythonを網羅的に教えてくれます。プログラミングスクールの10分の1以下の値段で学べるので、コスパも良しです。
※さらに30日間返金保証ありなので、実質リスクゼロ。
Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
スポンサーリンク