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

  1. Python 3.x の zip() 関数
  2. Python 2.x の zip() 関数

このチュートリアルでは、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

  • Python リストに値が存在するかどうかをすばやく確認する方法
  • Python で特定のサイズのリストを作成する方法
  • comments powered by Disqus