Python で複数のリストのループを回すときに、長い方のリストにあわせてループを回す方法についてご説明します。
Python では、組み込み関数 zip() を使うと、かんたんに複数のリストを同時に回すことができます。
names = ['Rao', 'Toki', 'Jagi', 'Ken']
numbers = [1, 5]
for name, number in zip(names, numbers):
print([name, number])
# => ['Rao', 1]
# ['Toki', 5]
ただし、ループの回数は長さの短い方のリストに切り詰められます。この場合は names の長さが 4 、 numbers の長さが 2 なので、結果としてループの回数は 2 回となります。
これでよい場合は特に問題ないのですが、ループ回数を長い方にあわせてほしい場合はこれでは困ります。そんなときに便利なのが標準ライブラリ itertools の zip_longest() 関数です。名前がそのまま!ですね。
使い方は zip() とほぼ同じです。
from itertools import zip_longest
names = ['Rao', 'Toki', 'Jagi', 'Ken']
numbers = [1, 5]
for name, number in zip_longest(names, numbers):
print([name, number])
# => ['Rao', 1]
# ['Toki', 5]
# ['Jagi', None]
# ['Ken', None]
短い方の足りない部分は None で代用されます。
以上です。
max(len(l1), len(l2)) で長い方のリストの長さは取得できるので、自分で実装してもさほど長い処理にはなりませんが、 zip_longest() を使うと Pythonic でわかりやすく書けるので、使えるところではなるべくこちらを使っていきたいところですね。