Python で複数のリストをループする方法

mo abdelazim 2023年1月30日
  1. Python 3.x の zip() 関数
  2. Python 2.x の zip() 関数
Python で複数のリストをループする方法

このチュートリアルでは、Python で 2つのリスト/タプルを同時に繰り返し処理する方法を説明します。ここでは zip()itertools.zip_longest() を使い、それぞれの違いと使い方を説明します。また、zip() の戻り値の型が Python 2 と Python 3 でどのように違うのかを見てみましょう。

Python 3.x の zip() 関数

関数 zip() は複数のリスト/タプルを引数にとり、タプルのイテレータである zip オブジェクトを返します。

2つのリストを繰り返し処理するには zip() を使用する

両方のリストを zip() 関数に渡し、for ループを使用して結果のイテレータを繰り返し処理します。

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
    print(a, b)

出力:

1 10
2 20
3 30
4 40

長さの異なる 2つのリストを繰り返し処理するには zip() を使用する

リストの長さが異なる場合、zip() は最も短いリストが終了した時点で停止します。以下のコードを参照してください。

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in zip(listA, listB):
    print(a, b)

出力:

1 10
2 20
3 30
4 40

itertools.zip_longest() を用いて二つのリストを繰り返し処理する

長い方のリストが終わるまで 2つのリストを繰り返し処理する必要がある場合は、itertools.zip_longest() を使用します。この関数は zip() 関数と同じように動作しますが、最長のリストが終了すると停止します。

空の値を None で埋め、タプルのイテレータを返します。

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB):
    print(a, b)

出力:

1 10
2 20
3 30
4 40
5 None
6 None

デフォルトの fillvalueNone であるが、fillvalue には任意の値を設定することができます。

import itertools

listA = [1, 2, 3, 4, 5, 6]
listB = [10, 20, 30, 40]

for a, b in itertools.zip_longest(listA, listB, fillvalue=0):
    print(a, b)

出力:

1 10
2 20
3 30
4 40
5 0
6 0

複数のリストで zip() を使用する

zip() とその兄弟関数は、2つ以上のリストを受け付けることができます。

import itertools

codes = [101, 102, 103]
students = ["James", "Noah", "Olivia"]
grades = [65, 75, 80]

for a, b, c in itertools.zip_longest(codes, students, grades, fillvalue=0):
    print(a, b, c)

出力:

101 James 65
102 Noah 75
103 Olivia 80

Python 2.x の zip() 関数

Python 2.x の zip() 関数も複数のリスト/タプルを引数に受け付けますが、タプルのリストを返します。これは小さなリストであれば問題ありませんが、巨大なリストを持つ場合は、タプルのイテレータを返すので、代わりに itertools.izip() を使用するべきです。

二つのリストを繰り返し処理するには itertools.izip() を使用する

import itertools

listA = [1, 2, 3, 4]
listB = [10, 20, 30, 40]

for a, b in itertools.izip(listA, listB):
    print(a, b)

出力:

1 10
2 20
3 30
4 40

関連記事 - Python List