Python iter() 関数とは?使い方・next()との関係を初心者向けに解説

Pythonのiter()は、リストやタプルなどの反復可能(iterable)なオブジェクトからイテレータ(iterator)を作るための組み込み関数です。
for文の仕組みを理解したり、next()と組み合わせてデータを1つずつ取り出したりするときに使います。
この記事では、Python初心者向けにiter()の基本的な使い方から、next()との関係、for文との違いまで解説します。
iter()とは?
iter()は、反復可能なオブジェクトからイテレータを作成する関数です。
基本構文は次のとおりです。
iter(オブジェクト)
例えば、リストにiter()を使ってみます。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(iterator)
実行すると、イテレータオブジェクトが返されます。
このイテレータから、next()を使って値を1つずつ取得できます。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(next(iterator))
print(next(iterator))
print(next(iterator))
実行結果:
10
20
30
このように、iter()はデータを順番に取り出すためのイテレータを作る関数です。
イテレータとは?
イテレータとは、データを1つずつ順番に取り出せるオブジェクトです。
例えば、次のリストがあります。
numbers = [10, 20, 30]
このリストにiter()を使います。
iterator = iter(numbers)
すると、リストの要素を順番に取得できるイテレータになります。
print(next(iterator))
10
もう一度実行すると、次の要素が取得されます。
print(next(iterator))
20
さらに実行すると、
print(next(iterator))
30
となります。
つまり、
リスト
↓
iter()
↓
イテレータ
↓
next()
↓
10 → 20 → 30
という関係です。
iter()とnext()の関係
iter()とnext()はセットで理解すると分かりやすくなります。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(next(iterator))
print(next(iterator))
print(next(iterator))
結果:
10
20
30
それぞれの役割は次のとおりです。
| 関数 | 役割 |
|---|---|
iter() |
イテレータを作る |
next() |
イテレータから次の値を取得する |
つまり、
iter()で取り出す仕組みを作り、next()で1つずつ取り出す
と覚えるとよいでしょう。
最後まで取り出すとStopIterationになる
イテレータに残っているデータがなくなると、next()はStopIterationという例外を発生させます。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
実行すると、最後のnext()でStopIterationが発生します。
10
20
30
StopIteration
これは「もう取り出せるデータがありません」という意味です。
for文でもiter()が使われている
普段Pythonを書くときは、次のようなfor文を使うことが多いでしょう。
numbers = [10, 20, 30]
for number in numbers:
print(number)
結果:
10
20
30
実は、for文は内部的にイテレータを利用しています。
イメージとしては、
iterator = iter(numbers)
while True:
try:
number = next(iterator)
print(number)
except StopIteration:
break
のような処理が行われています。
そのため、iter()とnext()を理解すると、Pythonのfor文がどのように動いているのかも理解しやすくなります。
文字列にもiter()を使える
iter()はリストだけではなく、文字列にも使用できます。
text = "Python"
iterator = iter(text)
print(next(iterator))
print(next(iterator))
print(next(iterator))
実行結果:
P
y
t
文字列も1文字ずつ取り出せる反復可能オブジェクトです。
タプルにもiter()を使える
タプルにもiter()を使えます。
data = ("Apple", "Banana", "Orange")
iterator = iter(data)
print(next(iterator))
print(next(iterator))
print(next(iterator))
結果:
Apple
Banana
Orange
辞書にiter()を使う
辞書にiter()を使った場合、デフォルトではキーを順番に取り出します。
user = {
"name": "Taro",
"age": 20
}
iterator = iter(user)
print(next(iterator))
print(next(iterator))
結果:
name
age
辞書の値を取り出したい場合は、values()を使います。
user = {
"name": "Taro",
"age": 20
}
iterator = iter(user.values())
print(next(iterator))
print(next(iterator))
結果:
Taro
20
iter()でリストを直接変更するわけではない
iter()を使っても、元のリストが変更されるわけではありません。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(numbers)
結果:
[10, 20, 30]
iter()はリストそのものを別のデータに変換するのではなく、リストの要素を順番に取得するためのイテレータを作ります。
iter()の第2引数を使う方法
iter()には、少し特殊な使い方があります。
次のように、2つの引数を指定できます。
iter(callable, sentinel)
この形式では、指定した関数を繰り返し呼び出し、戻り値がsentinelと一致するまで値を取得します。
例えば、次のコードです。
def get_number():
return 1
iterator = iter(get_number, 0)
この場合、
get_number()
を繰り返し呼び出します。
関数の戻り値が0になったところで終了します。
実務では、ファイルや入力処理などで利用されることがあります。
iter()とlist()の違い
iter()とlist()は役割が異なります。
numbers = [10, 20, 30]
iterator = iter(numbers)
iter()はイテレータを作ります。
一方、
iterator = iter(numbers)
numbers2 = list(iterator)
print(numbers2)
list()はイテレータなどから要素を取り出して、リストを作ります。
つまり、
iter()
→ イテレータを作る
list()
→ 要素を集めてリストを作る
という違いがあります。
iter()の実践例
例えば、リストの要素を1つずつ処理したい場合は、次のように書けます。
fruits = ["apple", "banana", "orange"]
iterator = iter(fruits)
while True:
try:
fruit = next(iterator)
print(fruit)
except StopIteration:
break
結果:
apple
banana
orange
ただし、通常はこのような処理を書くよりも、for文を使うほうが簡潔です。
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
そのため、iter()は普段の処理で直接使うというより、イテレータの仕組みを理解するときに重要な関数と考えるとよいでしょう。
iter()を使うメリット
iter()を使う主なメリットは、データを一度にすべて処理するのではなく、必要なタイミングで1つずつ取得できることです。
特に大量のデータを扱う場合、イテレータやジェネレータの仕組みが重要になります。
例えば、
iterator = iter(numbers)
としておけば、必要になったときに
next(iterator)
で次のデータを取得できます。
このような仕組みは、Pythonのメモリ効率や遅延評価を理解するうえでも重要です。
iter()まとめ
Pythonのiter()は、反復可能なオブジェクトからイテレータを作るための組み込み関数です。
基本的な使い方は次のとおりです。
numbers = [10, 20, 30]
iterator = iter(numbers)
print(next(iterator))
print(next(iterator))
print(next(iterator))
結果:
10
20
30
ポイントをまとめると、
-
iter()はイテレータを作る -
next()はイテレータから次の値を取得する -
データがなくなると
StopIterationが発生する -
for文も内部でイテレータの仕組みを利用している -
リスト、タプル、文字列、辞書などに利用できる
-
Pythonの反復処理を理解するうえで重要な関数
となります。
Python初心者の場合、まずは**「iter()でイテレータを作り、next()で1つずつ取り出す」**と覚えておけば十分です。
あわせて読みたい
iter()は、Pythonの組み込み関数の1つです。ほかの関数・メソッドとあわせて確認したい方は、次の一覧ページをご覧ください。






