用語比較
zip() と enumerate() の違い(2つのリストを同時に回すか、番号つきで回すか)
enumerate() は、1つのシーケンスから、カウントと要素のペアを取り出します。zip() は、2つ以上のシーケンスから、各要素をひと組みにして取り出します。どちらも代表的には for 文で2つの変数に受ける形で使います。
Python3基礎試験では、for 文の変数に何が入るかを読み分けます。番号と要素なら enumerate()、別々のリストの要素の組なら zip()と覚えると、選択肢を整理できます。
このページは、Python公式のチュートリアル5.6と組み込み関数の説明をもとに、渡すもの・取り出すもの・長さが違うとき・引数で比べます。例は、説明用の架空のコードです。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
enumerate()
1つのイテラブルから、カウント(既定は0から)と要素を含むタプルを取り出す。
zip()
複数のイテラブルを並行に処理し、各イテラブルのi番目の要素からなるタプルを取り出す。
見分け方
渡すイテラブルが1つで番号が付くなら enumerate()、複数なら zip()。
違いを表で確認
| 比較軸 | enumerate() | zip() |
|---|---|---|
| 渡すもの | enumerate():1つのイテラブル | zip():複数のイテラブル |
| 取り出すもの | enumerate():カウントと要素を含むタプル | zip():各イテラブルのi番目の要素からなるタプル |
| 長さが違うとき | enumerate():渡すイテラブルは1つなので、長さの食い違いは起きない | zip():既定では最も短いイテラブルが尽きると止まり、長いほうの残りは無視する |
| 主な引数 | enumerate():start でカウントの開始値を決める(既定は0) | zip():strict=True で、長さが違うと ValueError になる(3.10で追加) |
| for文での受け方 | enumerate():for i, v in enumerate(seq): | zip():for q, a in zip(questions, answers): |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
2つのリストを同時に回したい人
公式チュートリアルは、2つ以上のシーケンスを同時にループするために zip() を使って各要素をひと組みにできると述べます。zip() だけでは番号は付かないので、番号も要るときは enumerate() と組み合わせます。
要素と番号を一緒に取り出したい人
公式チュートリアルは、シーケンスにわたるループで enumerate() を使うと、要素のインデックスと要素を同時に取り出せると述べます。番号を1から始めたいときは start=1 を渡します。
長さの違うリストを zip() に渡す人
既定では、最も短いイテラブルの長さに切り詰められ、長いほうの残りは無視されます。長さが同じはずなら、strict=True を使うと食い違いを ValueError で知れます。
具体例で使い分ける
例 1
2つのリストを zip() で回す場合(架空のコード)
names = ["a", "b", "c"] と scores = [10, 20, 30] に対して、list(zip(names, scores)) を表示します。
- zip() は、各リストのi番目の要素をひと組みにしたタプルを作ります。
- 最初の組は ("a", 10)、次は ("b", 20)、最後は ("c", 30) です。
結論: [("a", 10), ("b", 20), ("c", 30)] になります。
例 2
start を指定した enumerate() の場合(公式の例)
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] に対して、list(enumerate(seasons, start=1)) を表示します。
- enumerate() は、カウントと要素のタプルを作ります。
- start=1 なので、カウントは1から始まります。
結論: [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] になります。
例 3
長さが違う2つを zip() に渡す場合(公式の例)
list(zip(range(3), ['fee', 'fi', 'fo', 'fum'])) を表示します。
- range(3) は3要素で、もう一方は4要素です。
- 最も短いイテラブルが尽きた時点で止まり、'fum' は無視されます。
結論: [(0, 'fee'), (1, 'fi'), (2, 'fo')] になります。strict=True を付けると ValueError になります。
問題文から答えを選ぶ手順
- 1
渡すイテラブルの数を見る
1つなら enumerate()、複数なら zip() を疑います。
- 2
for文の変数を見る
番号と要素を受けているなら enumerate()、別々のリストの要素を受けているなら zip() です。
- 3
長さが違わないかを見る
zip() に渡すリストの長さが違うと、短いほうに合わせて止まります。
- 4
引数を見る
start は enumerate()、strict は zip() の引数です。
試験での見分け方
- 1enumerate() は、カウントと要素を含むタプルを返す。カウントは既定で0から始まる。
- 2zip() は、各イテラブルのi番目の要素を含むタプルのイテレータを返す。
- 3zip() は既定で、最も短いイテラブルの長さに切り詰める。
- 4zip() の strict=True は、長さが違うと ValueError を送出する。
- 5短いイテラブルを一定の値で埋めたいときは、itertools.zip_longest() を使う。
誤答しやすい選択肢
zip() の結果に番号が付くと考える
修正: zip() が返すのは各イテラブルの要素の組です。番号が要るなら enumerate() を使います。
長さが違っても、長いほうの残りも取り出されると考える
修正: 既定では最も短いイテラブルで止まり、残りは無視されます。
enumerate() の番号が必ず1から始まると考える
修正: 既定は0からです。1から始めるには start=1 を渡します。
確認問題
Q1list(enumerate(['x', 'y'])) の結果は?
答え: [(0, 'x'), (1, 'y')]
カウントは既定で0から始まります。
Q2list(zip([1, 2, 3], ['a', 'b'])) の要素数は?
答え: 2
最も短いイテラブルの長さに切り詰められます。
Q3zip() で、長さが違うときに ValueError を送出させる引数は?
答え: strict=True
3.10で追加された引数です。
到達チェック
- enumerate() と zip() が取り出すものの違いを言える
- zip() の長さが違うときの動きを言える
- start と strict がどちらの引数か言える
関連ページで確認する
同じ資格で次に知りたいこと
- 浅いコピーと深いコピーの違い(copy.copy と copy.deepcopy)
Pythonの copy.copy(浅いコピー)と copy.deepcopy(深いコピー)の違いを、入れ子のリストを変更したときの動き、list.copy() や a[:] との関係、判断手順と確認問題つきで解説します。
- staticmethodとclassmethodの違い|第一引数にクラスを受け取るか(Python3基礎)
staticmethodとclassmethodの違いを、Python公式ドキュメントの記述(暗黙の第一引数の有無、継承時に渡されるクラス)と実行結果で整理。Python3エンジニア認定基礎試験のクラスの選択肢を切り分ける判断手順と確認問題つき。
- sys.argvとargparseの違い|コマンドライン引数の受け取り方(Python3基礎)
sys.argvは引数をそのままリストで受け取り、argparseは--linesのようなオプションを定義して解析します。Python公式チュートリアル10.3の例で整理。確認問題つき。
よくある質問
Qzip() と enumerate() の違いは?
enumerate() は1つのイテラブルにカウントを付け、zip() は複数のイテラブルの要素をひと組みにします。
Qzip() で長さが違うとどうなりますか?
既定では最も短いイテラブルの長さに切り詰められます。strict=True なら ValueError になります。
Qenumerate() を1から始めるには?
start=1 を渡します。既定は0です。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
