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

こんにちは、ミナトです。

Pythonではリストなどの複数の要素を持つデータ型扱う際にイテレータという機能が利用できます。

今回はイテレータの特徴と使い方について紹介します。

今回はリストなどの複数の要素を持つデータ型(コレクション、シーケンス)から順番にデータを取り出す機能を提供するイテレータについて紹介するで😆
以下のような方を対象としています
  • Pythonのイテレータの使い方を知りたい
  • Pythonでプログラミングを学びたい

イテレータの使い方

イテレータとは?

イテレータとは、リストやタプルなど複数の要素を持つデータ型(コレクション、シーケンス)から順番に要素を取り出す機能のことです。

イテレータでは、シーケンスから次の要素を取り出す取り出したら知らせるといった処理を行いながらデータを扱います。

イテレータの定義

それでは、具体的なイテレータの使い方を説明します。

次の例では、iter()関数を利用してリストをイテレータに変換しています。
next()関数の引数にイテレータを渡すことで次の要素を取り出せます。

next()関数が実行されるたびに次の要素を取得します。また、リストだけでなく、ディクショナリやタプルもイテレータに変換できます。

i = iter([1, 2 , 3, 4, 5])

print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))

## 出力
1
2
3
4
5

次の要素がない場合は、「StopIteration」という例外が発生します。
例外処理については別の機会に解説したいと思いますが、例外が発生した場合に何か処理を行うなどの制御が可能です。

以下の例では6回目の呼び出しで例外が発生します。

i = iter([1, 2 , 3, 4, 5])

print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))

## 出力
1
2
3
4
5
Traceback (most recent call last):
  File "/Users/minato/PycharmProjects/pythonProject/lesson1.py", line 8, in <module>
    print(next(i))
StopIteration

イテレータとfor文

普段意識することはありませんが、for文では内部的にイテレータが使われています。

Pythonが自動的にイテレータが利用できるか判断し、内部的にイテレータを利用してfor文が1ループするごとに要素が取得されます。

イテレータを意識してコードを書くことは少ないかもしれませんが、仕組みとして裏側でこのようなことが行われているんだなと理解しておきましょう。

l1 = [1, 2 , 3, 4, 5]

for i in  l1:
    print(i)

イテレータの使い所

大きなサイズのファイルを扱うときやデータベース上のデータを取得するときにイテレータを利用すると効率がよくなります。

例えば大きなサイズのファイルからデータを取り出す時、一度に全てのデータを読み込むとメモリをたくさん使用しますし、読み込みに時間がかかってしまいます。

そこでイテレータを利用することで、前から必要な分だけ順番にデータを取得できるので、大きなデータであっても効率的に扱うことができます。

以下の例では、ファイルの前から5行を取得しています。

イテレータを使わない場合以下のように記述できます。

f = open('sample.txt')
body = f.read() #ファイル全てを読み込み
lines = body.split('\n')
print('\n'.join(lines[:5]))

これをイテレータを利用すると以下のように記述できます。
上の例のようにファイルを全て読み込まなくても上から必要なデータを読み込むことができます。

for i, l in enumerate(open('sample.txt')):
    print(l, end='')
    if i == 4:
        break

まとめ

今回はPythonでのイテレータの使い方について紹介しました。
イテレータの特徴を以下の通りです。

イテレータの特徴
  • 複数の要素をもつデータ型(リスト、タプルなど)から順番にデータを取り出す機能を提供する
  • for文も内部的にイテレータを利用している
  • 要素がない場合、「StopIteration」の例外が発生する
  • 取り出すのに時間のかかる大きなデータを扱うときに効率がよくなる

最後まで読んでいただき、ありがとうございます。

この記事が、「面白いな」、「勉強になったな」という方は、SNSでシェアしていただけると嬉しいです。