イテレータとは
Pythonでは、リストや文字列、辞書などのデータ構造を効率的に処理するために「イテレータ」という概念が使われています。この記事では、イテレータの基本的な仕組みと使い方について詳しく説明します。
イテレータの特徴
- メモリ効率が高い: イテレータはデータ全体を一気に保持せず、1つの要素ずつ順に処理します。
- 遅延評価(ラザリー・エバリュエーション): 次の要素が必要になるまで計算を行いません。
- 戻ることはできない: 一度処理した要素には戻ることができません。最初からやり直したい場合は新しいイテレータを作成する必要があります。
イテレータの使用方法
以下の例を使って、イテレータの基本的な操作を見てみましょう。
コード例:イテレータの生成と要素の取得
data = ["Python", "機械学習", "深層学習", "MATLAB"]
it = iter(data) # イテレータの生成
print(next(it)) # Python
print(next(it)) # 機械学習
print(next(it)) # 深層学習
print(next(it)) # MATLAB
注意点
要素がなくなった場合、
next() を呼び出すと例外
StopIteration が発生します。
イテレーションの完全な処理
全ての要素を安全に処理するには、以下のように例外処理を使うか、while ループで処理できます。
data = ["Python", "機械学習", "深層学習", "MATLAB"]
it = iter(data)
while True:
try:
element = next(it)
print(element)
except StopIteration:
break
forループの内部動作
Pythonの
for ループは、実際にはイテレータを使用して動作しています。次のコードは、forループの動作を手動で再現したものです。
data = ["Python", "機械学習", "深層学習", "MATLAB"]
# forループの内部動作
it = iter(data)
while True:
try:
item = next(it)
print(item)
except StopIteration:
break
可変長引数の確認
すべてのデータ型がイテレータとして扱えるわけではありません。例えば、整数型 (
int) はイテレータとして扱えません。
try:
it = iter(123456789)
print(next(it))
except TypeError as e:
print(e) # 'int' object is not iterable
簡略化されたループ処理
イテレータを使えば、複雑なインデックス操作を避けてシンプルなループを実現できます。
data = ["Python", "機械学習", "深層学習", "MATLAB"]
it = iter(data)
for _ in range(len(data)):
print(next(it))