1. はじめに
Pythonで繰り返し処理を行う際、リストやタプルなどのイテラブルなオブジェクトをfor文で使うのが一般的です。しかし、内部的にどのように繰り返しが行われているかを知っていますか?そのカギを握るのがiter()
関数です。
本記事では、Pythonのiter()
関数の基本的な使い方から、実務でも活用できる応用例、注意点まで、初心者にもわかりやすく解説します。コード例や実行結果も交えながら丁寧に説明していきますので、Python学習者は必見です。
2. iter()関数の基本と使い方
iter()関数とは?
iter()
関数は、Pythonでイテレータ(iterator)を生成するための組み込み関数です。イテレータは「次の要素を1つずつ取り出す」オブジェクトで、forループの裏側でもこの仕組みが使われています。
基本的な使い方
リストなどのイテラブルオブジェクトに対してiter()
を使うと、イテレータを取得できます。
fruits = ['apple', 'banana', 'cherry']
# イテレータを作成
it = iter(fruits)
# 次の要素を1つずつ取り出す
print(next(it))
print(next(it))
print(next(it))
実行結果:
apple
banana
cherry
next()
関数を使うことで、iter()
で生成したイテレータから順番に要素を取得できます。
イテレータの特徴
- 一度取り出した要素は戻らない(消費される)
- 要素が尽きた状態で
next()
を呼ぶとStopIteration
例外が発生する
3. iter()関数のよくある使い方・応用例
forループの内部で使われている
普段使っているforループも、実はiter()
とnext()
を内部的に利用しています。
fruits = ['apple', 'banana', 'cherry']
it = iter(fruits)
while True:
try:
fruit = next(it)
print(fruit)
except StopIteration:
break
実行結果:
apple
banana
cherry
ファイルの読み込みに使う
ファイルオブジェクトもイテラブルなので、iter()
を使って1行ずつ処理できます。
with open('example.txt') as f:
it = iter(f)
for line in it:
print(line.strip())
実行結果:
(ファイルの各行が出力される)
引数付きiter(func, sentinel)でカスタムイテレータ
iter()
は2つの引数を取ることもでき、関数呼び出しと終了条件(番兵)を指定してカスタムイテレータを作成できます。
import random
# 0が出るまでランダムな数を出力する
def get_random():
return random.randint(0, 5)
for num in iter(get_random, 0):
print(num)
実行結果(例):
3
5
2
1
(0が出たら終了)
4. iter()使用時の注意点・エラー対策
next()で取り出しすぎるとStopIterationエラーが発生
イテレータの最後の要素を取り出した後、さらにnext()
を呼ぶとエラーになります。
numbers = [1, 2]
it = iter(numbers)
print(next(it)) # 1
print(next(it)) # 2
print(next(it)) # エラー発生
実行結果:
1
2
Traceback (most recent call last):
...
StopIteration
エラーを避けるにはtry-except
でStopIteration
をキャッチするか、for
ループを使うのが安全です。
リストとイテレータの違いに注意
イテレータは一度しか使えません。以下の例で2回目のforループは何も出力されません。
data = ['a', 'b', 'c']
it = iter(data)
for x in it:
print(x)
# 再利用しようとしても出力されない
for x in it:
print(x)
実行結果:
a
b
c
イテレータは「使い切り型」なので、必要ならiter()
で再度生成しましょう。
5. まとめ
iter()
はイテレータを生成するための組み込み関数- リスト、タプル、ファイルなどのイテラブルなオブジェクトに使用できる
- カスタム繰り返し処理には
iter(func, sentinel)
が便利 - イテレータは使い切りなので注意が必要
iter()
関数はPythonの繰り返し処理の中核を担っており、理解することでコードの内部動作がより深くわかるようになります。実務でも「大きなデータを1つずつ処理する」「終了条件付きのループを書く」といったシーンで役立ちます。
ぜひ、今回学んだ内容を使ってPythonスキルを一歩先へ進めてください!