用語比較
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冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
ループの中で添字と要素の両方が欲しい人
enumerate()なら、for i, v in enumerate(a): の1行で両方が手に入ります。range(len(a)) では、要素を a[i] と書いて取り出す手間が増えます。
番号を1から振りたい人
enumerate(a, start=1) と書くと、番号が1から始まります。要素は変わらず先頭から順に取り出されます。
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
何を受け取るか確認する
添字と要素の両方を受け取る書き方なら enumerate()、添字だけなら range(len()) です。
- 2
形で見分ける
for i, v in の形ならenumerate()。for i in range(len(a)): の形なら range(len()) です。
- 3
開始番号を確認する
start引数があればenumerate()。何も書かなければ0から始まります。
- 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つの書き方の出力を手でたどって一致を確かめられる
関連ページで確認する
同じ資格で次に知りたいこと
- 継承とsuper()・多重継承の探索順の違い|Python3エンジニア認定基礎試験で判断する
単一継承、基底クラスのメソッドの直接呼び出し、super()、多重継承の探索順の違いを、公式チュートリアル9章の記載にそって整理。Python 3 エンジニア認定基礎試験の第9章(クラス)対策として、確認問題つきで説明します。
- break・continue・ループのelse節の違い(ループの途中終了と飛ばし)
Pythonのbreak、continue、ループのelse節の違いを、動き、else節が実行される条件、公式チュートリアル4.4と4.5の記述から実行結果つきで比較します。Python3エンジニア認定基礎試験での見分け方と確認問題も示します。
- Python3エンジニア認定基礎試験と生成AIアドバイザー認定試験の違い|出題範囲・試験時間・受験料で比較
Python3エンジニア認定基礎試験と生成AIアドバイザー認定試験の違いを、出題範囲、問題数と試験時間、受験料、受験方式、合格基準で比較します。Pythonの文法を学ぶ試験と、生成AIを業務で使う力を測る試験のどちらを先に受けるかを決められます。
よくある質問
Qenumerate()とrange(len())の違いは?
enumerate()は添字と要素を同時に取り出し、range(len())は添字だけを取り出します。要素が必要なときは a[i] と書きます。
Qどちらを使うべきですか?
公式チュートリアル4.3は、「多くの場合は enumerate() 関数を使う方が便利です。」と述べています。
Qenumerate()の番号を1から始めるには?
enumerate(a, start=1) と書きます。start引数を省略すると0から始まります。
Qenumerate()はリストにも文字列にも使えますか?
使えます。公式ドキュメントは、シーケンス、イテレータ、反復をサポートするその他のオブジェクトを受け取れると述べています。文字列に使うと、文字ごとに番号と文字の組が得られます。
Qenumerate()はPython3エンジニア認定基礎試験の範囲ですか?
公式の出題範囲は主教材の章単位で示され、個別の関数までは公表されていません。enumerate()は公式チュートリアルの4.3と5.6に登場するため、当サイトの事実リストに含めています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
