【Python入門】イテレータの使い方を解説

【Python入門】イテレータの使い方を解説
長野 透
書いた人 長野 透
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!フリーランスの長野です。

イテレータって使っていますか?

リストや辞書などの要素が集まったデータを操作する場合に使うと便利な機能です。

例えばリストを逆順で操作したい場合や2つおきに要素を抽出したい場合など、必要に応じた操作を行いたい場合にイテレータを使うと便利です。

この記事では、イテレータについて

・イテレータとは
・イテレータの使い方

という基本的な内容から、

・itertoolsの使い方
・イテレータの実装

など応用的な内容についても解説していきます。

今回はイテレータについて、使い方をわかりやすく解説します!

イテレータとは

イテレータとは次の要素にアクセスすることを繰り返すインターフェースのことを言います。

リストやタブル、辞書などのコレクション型の要素に順にアクセスし処理する場合に使用します。

イテレータは最初の要素から最後の要素までを順にアクセスする単純な操作ですが、itertoolsモジュールなどを使うことでこれ以外にも便利な操作が可能になります。

また自作のクラスを作成することで、イテレータを行いたい操作にカスタマイズすることも可能です。

イテレータの使い方

イテレータの基本的な使い方について確認していきましょう。

iterの使い方

イテレータを使う場合、iter関数を使用します。

iter関数の引数にはリストや辞書などのコレクション型のオブジェクトを入力します。

それではサンプルコードを確認しながらみていきましょう。

実行結果:

このサンプルコードではseasonという文字列のリストを使用しています。

iter関数を使ってリストのイテレータを生成しています。

next関数を使うと次のイテレータへ進みます

1番目のイテレータをprint関数で表示したあとnext関数で次のイテレータへ進み、その後for文を使って一つずつイテレータを表示しています。

for文などのループを使う場合、イテレータはnext関数を記述しなくても自動で次のイテレータへと進むようになっています。

したがって、リストの2番目の「Summer」は表示されずに次の「Fall」以降がfor文を使って表示されています。

また、その後にもfor文を使ってイテレータを表示をしようとしていますが、表示されていません。

これは1回目のfor文で最後の要素まで進んだためで、2回目のfor文ではイテレータの要素がないために表示されていません。

reversedの使い方

次にreversed関数の使い方について確認していきましょう。

reversed関数はリストなどのコレクション型データを最後から逆順に処理したい場合などで使われます。

実行結果:

このサンプルコードでは、reversed関数を使ってrev_seasonオブジェクトを生成しています。

rev_seasonオブジェクトの型を表示して確認すると、list_reverseiteratorとなっています。

reverseiteratorもiteratorと同様に扱います。

このサンプルコードではnext関数を使って、次のイテレータへ進んでいます。

その後、for文を使って一つずつイテレータを表示しています。

next関数を使って次に進ませていますので逆順にした最初の要素「Winter」は表示されず、「Fall」以降がfor文を使って逆順で表示されています。

こちらもfor文を2回使って表示するようにしていますが、2回目のfor文で表示されていないのは1回目のfor文でイテレータが最後の要素まで達しているためです。

itertoolsの使い方

イテレータを使った便利な機能としてitertoolsモジュールが用意されています。

itertoolsモジュールのchainzip_longestisliceteeそれぞれのメソッドの使い方についてサンプルコードを確認していきましょう。

itertoolsモジュールを使うにはインポートする必要があります。

chainの使い方

実行結果:
itertoolsモジュールのchainメソッドを使用して、2つのリストをシーケンシャルに結合しています。

chainメソッドの引数に結合する2つのリストを入力しています。

zip_longestの使い方

実行結果:
zip_longestメソッドを使用して、2つのリストの要素同士をセットにして結合しています。

zip_longestの引数に結合する2つのリストを入力しています。

isliceの使い方

実行結果:
isliceメソッドを使用して要素を抽出しています。

countメソッドで生成される正の整数値の中からゼロから10未満の要素を2つおきに抽出しています。

isliceメソッドの第1引数には操作したいイテレータを入力します。

第2引数にはスタートするインデックス数を入力します・

第3引数には終わりのインデックス数を入力します。

第4引数には何個おきに抽出するかステップ数を入力しています。

第3引数と第4引数は省略可能で第3引数を省略した場合、インデックス0(ゼロ)からスタートして第2引数のインデックス未満まで抽出します。

第4引数を省略した場合、ステップして抽出されることはありません。

teeの使い方

実行結果:
teeメソッドを使用して同じイテレータを複数返しています

teeメソッドの引数には複製する元となるイテレータを入力します。

このようにitertoolsモジュールのメソッドを使用することでさまざまな要素の操作を簡単に記述することができます。

イテレータの実装

これまでは標準で準備している関数やモジュールを使ってイテレータを操作してきました。

イテレータは自作のクラスを使って実装することもできます。

サンプルコードを確認して使い方をみていきましょう。

実行結果:

このサンプルコードでは自作のイテレータクラスとなるMyIterクラスを作成しています。

コンストラクタでは引数でオブジェクトを入力しMyIterクラスのobjsオブジェクトに代入しています。

またindex値をゼロで初期化しています。

__iter__メソッドは新しいイテレータを作るときに呼び出されます。

このサンプルコードではコンストラクタで初期設定をしていますので、そのままselfを返しています。

__next__メソッドは次のイテレータに進むときに呼び出されます。

index値がコンストラクタで入力されたオブジェクトの要素数以上になるとStopIterationクラスを使ってイテレータが次に進むのを止めています

objsオブジェクトの中のindex値の要素をvalueオブジェクトに代入しています。

__next__メソッドではインデックスと要素がセットで出力されるように、index値とvalueオブジェクトを返すように記述しています。

また__next__メソッドでは2つおきに要素が出力されるように、処理の最後にindex値を2カウントアップしています。

このMyIterクラスからmy_iterインスタンスを生成して、for文を使って1つずつイテレータを表示しています。

まとめ

ここでは、イテレータの使い方やitertoolsの使い方などについて説明しました。

イテレータを使うことでリストの逆順の処理やインデックス付きの要素出力など、コレクション型データの操作が簡単な記述で実装できます。

また使用目的にあわせてイテレータのクラスを自作することでカスタマイズする方法についても説明しました。

イテレータの操作を使いこなすことができるようにこの記事を何度も参考にして下さいね!

Pythonカリキュラム無料公開中!
この記事はPython入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Python学習に必要な情報を一つにまとめていますので効率よくPythonを学ぶことが出来ます。この機会に是非活用していただければと思います。



33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


Pythonを最短で習得したい方へ
元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Pythonを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」
このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、AI(人工知能)や機械学習、IoTについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Pythonならではの学習方法や、現役Pythonエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta_mtm_python

学習者インタビュー

人気講師インタビュー

人気記事セレクション

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題!最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
Python学習カリキュラム無料公開中
 1記事最大11,000円!テックライター募集


LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]