AI資格ドリル
資格を選ぶ↓

用語比較

enumerate()とrange(len())の違い(ループで添字を使う書き方)

enumerate()とrange(len())の違いは、添字と要素をどう取り出すかです。公式チュートリアル4.3は、シーケンスにインデクスで反復するには for i in range(len(a)): のように range() と len() を組み合わせられるとしたうえで、「しかし、多くの場合は enumerate() 関数を使う方が便利です。」と述べています。

どちらも添字を使うループが書けます。enumerate()は添字と要素を同時に受け取り、range(len())は添字だけを受け取って、要素はa[i]で取り出します。

公式の出題範囲は主教材(Pythonチュートリアル 第四版対応)の章単位で、enumerate()の個別の出題有無までは示していません。このページでは、公式チュートリアル4.3と5.6に沿って違いを整理し、コード例の出力も確認しています。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

enumerate()

for i, v in enumerate(a): と書き、添字と要素を同時に取り出す。公式チュートリアルは、多くの場合こちらが便利だと述べる。

range(len())

for i in range(len(a)): と書き、添字だけを取り出す。要素が必要なときは a[i] と書く。

違いを表で確認

比較軸enumerate()range(len())
書き方for i, v in enumerate(a):for i in range(len(a)): (要素は a[i])
取り出すもの添字と要素の組(タプル)を1回ごとに受け取る添字だけ。要素は添字を使って別に取り出す
公式チュートリアルの扱い5.6「ループのテクニック」で、要素のインデックスと要素を同時に取り出せる関数として紹介される。4.3では、多くの場合こちらが便利だと述べる4.3で、シーケンスにインデクスで反復する方法として紹介される
開始番号start引数で指定でき、省略すると0から。enumerate(a, start=1)なら1から数えるrange(len(a)) は0からlen(a)−1まで。1から始めるには range の引数を書き換える
対象公式ドキュメントでは、シーケンス、イテレータ、反復をサポートするその他のオブジェクトを受け取れるlen()で長さを求めるので、長さが分かるものが前提になる

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

ループの中で添字と要素の両方が欲しい人

enumerate()なら、for i, v in enumerate(a): の1行で両方が手に入ります。range(len(a)) では、要素を a[i] と書いて取り出す手間が増えます。

02

番号を1から振りたい人

enumerate(a, start=1) と書くと、番号が1から始まります。要素は変わらず先頭から順に取り出されます。

03

range(len()) は間違いだと思っている人

間違いではありません。公式チュートリアルも、書ける方法として紹介したうえで、多くの場合はenumerate()の方が便利だと述べています。

具体例で使い分ける

例 1

range(len()) で添字と要素を出力する

fruits = ['tic', 'tac', 'toe'] の添字と要素を並べて出力する場面です。

  • for i in range(len(fruits)): print(i, fruits[i]) と書きます。
  • 実行すると、0 tic、1 tac、2 toe の3行が出力されます。
  • 要素を取り出すために、fruits[i] と添字で書く必要があります。

結論: 添字だけを受け取り、要素は別に取り出します。

例 2

enumerate() で同じ出力を得る

同じ fruits について、同じ出力を得る場面です。

  • for i, v in enumerate(fruits): print(i, v) と書きます。
  • 実行すると、0 tic、1 tac、2 toe の3行が出力され、range(len()) と同じ結果になります。
  • 公式チュートリアル5.6にも、同じ形の例が載っています。

結論: 添字と要素を同時に取り出し、結果は同じになります。

例 3

1から番号を振る

同じ fruits の番号を1から振りたい場面です。

  • for i, v in enumerate(fruits, start=1): print(i, v) と書きます。
  • 実行すると、1 tic、2 tac、3 toe の3行が出力されます。
  • 公式ドキュメントも、start=1 の例で (1, 'Spring') のように番号が1から始まることを示しています。

結論: start引数で開始番号を変えられます。

問題文から答えを選ぶ手順

  1. 1

    何を受け取るか確認する

    添字と要素の両方を受け取る書き方なら enumerate()、添字だけなら range(len()) です。

  2. 2

    形で見分ける

    for i, v in の形ならenumerate()。for i in range(len(a)): の形なら range(len()) です。

  3. 3

    開始番号を確認する

    start引数があればenumerate()。何も書かなければ0から始まります。

  4. 4

    出力を手でたどる

    最初の1回の i と v の値を書き出し、2回目以降も同じ規則で増えているか確認します。

試験での見分け方

  • 1添字と要素を同時に取り出すのは enumerate()。
  • 2range(len(a)) は添字だけを作り、要素は a[i] で取り出す。
  • 3enumerate() の開始番号は start 引数で変えられ、省略すると0から。
  • 4公式チュートリアルは、多くの場合 enumerate() の方が便利だと述べる。
  • 5range() が返すオブジェクトは、いろいろな点でリストのように振る舞うが、本当はリストではない。

誤答しやすい選択肢

enumerate() が返すものを、リストだと考える

修正: 公式ドキュメントでは、enumerate()は列挙オブジェクトを返します。要素は (カウント, 値) のタプルで、list() でリストにすると [(0, 'tic'), (1, 'tac'), (2, 'toe')] のようになります。

for i, v in enumerate(a, 1) を、1番目の要素から始まる意味だと考える

修正: 1はカウントの開始番号です。要素は先頭から順に取り出され、番号だけが1から始まります。

range(len(a)) の i が、要素そのものだと考える

修正: i は添字(番号)です。要素を使うには a[i] と書きます。

range(len(a)) の結果が、リストとして表示されると考える

修正: 公式チュートリアルは、range(10)をそのまま出力すると range(0, 10) と表示され、本当はリストではないと述べています。

確認問題

Q1for i, v in enumerate(['tic', 'tac', 'toe']): print(i, v) の出力は?

答え: 0 tic、1 tac、2 toe の3行

公式チュートリアル5.6の例と同じです。添字は0から始まります。

Q2enumerate(['tic', 'tac', 'toe'], start=1) で、最初に取り出される組は?

答え: (1, 'tic')

start引数で番号が1から始まります。要素は先頭から順に取り出されます。

Q3公式チュートリアル4.3は、range(len(a)) と enumerate() のどちらが多くの場合便利だと述べている?

答え: enumerate()

「しかし、多くの場合は enumerate() 関数を使う方が便利です。」と述べています。

到達チェック

  • enumerate() と range(len()) の書き方の違いを説明できる
  • enumerate() が添字と要素を同時に取り出すと説明できる
  • start引数で開始番号を変えられると説明できる
  • range() が返すものが本当はリストではないと説明できる
  • 2つの書き方の出力を手でたどって一致を確かめられる

同じ資格で次に知りたいこと

よくある質問

Qenumerate()とrange(len())の違いは?

A

enumerate()は添字と要素を同時に取り出し、range(len())は添字だけを取り出します。要素が必要なときは a[i] と書きます。

Qどちらを使うべきですか?

A

公式チュートリアル4.3は、「多くの場合は enumerate() 関数を使う方が便利です。」と述べています。

Qenumerate()の番号を1から始めるには?

A

enumerate(a, start=1) と書きます。start引数を省略すると0から始まります。

Qenumerate()はリストにも文字列にも使えますか?

A

使えます。公式ドキュメントは、シーケンス、イテレータ、反復をサポートするその他のオブジェクトを受け取れると述べています。文字列に使うと、文字ごとに番号と文字の組が得られます。

Qenumerate()はPython3エンジニア認定基礎試験の範囲ですか?

A

公式の出題範囲は主教材の章単位で示され、個別の関数までは公表されていません。enumerate()は公式チュートリアルの4.3と5.6に登場するため、当サイトの事実リストに含めています。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)