【Python3 初心者向け】zip関数を使ったちょっと便利なfor文の使い方

スポンサーリンク
Python
スポンサーリンク

前回書いた【初心者向け】Python3のfor文の使い方まとめをちょっと手直しして勤め先の社内に展開した所、一部の意識高い層から好評だったので調子に乗って続きを書きます。

【初心者向け】Python3のfor文の使い方まとめ
Python3のfor文について特徴を初心者でもわかりやすいように簡単にまとめました。 * Pythonのfor文はシーケンス型のオブジェクトと併せて使用する * シーケンス型のオブジェクトにはリスト、タプル、文字列、rangeオブジェクトがある * continue文でループを一回スキップ、break文でループを抜けることができる * forループのelse節には最後に一回だけ実行したい処理を書く。ただし、breakでforループを抜けた時は実行されない
スポンサーリンク

前回のおさらい

  • Pythonのfor文はシーケンス型のオブジェクトと併せて使用する
  • シーケンス型のオブジェクトにはリスト、タプル、文字列、rangeオブジェクトがある
  • continue文でループを一回スキップ、break文でループを抜けることができる
  • forループのelse節には最後に一回だけ実行したい処理を書く。ただし、breakでforループを抜けた時は実行されない

複数のシーケンス型オブジェクトを対象にforループを回すには?

Pythonのfor文はシーケンス型オブジェクトを対象にループを回しますが、例えば2つのシーケンス型オブジェクトがあって、それらに同時に処理を行いたい場合はどうすればよいでしょうか??

C言語風に書くと例えばこんな処理(あるかどうかは置いておいて)。

int a[] = {1,2,3,4,5};
int b[] = {10,9,8,7,6};

for(i=0;i<5;i++){
    sum += a[i]+b[i];
}

みたいなこと(2つのリストに対して同時に処理する)を、Pythonでやりたい場合、zip関数という組み込み関数を使うと良いようです。

Python3のzip関数は、引数で与えられた複数のシーケンス型オブジェクトに対してそれぞれのi番目の要素を取り出して結合し、タプルのイテレータを返します。

動作例1

list1 = ['item1','item2','item3']
list2 = ['item4','item5','item6']

zipped = zip(list1, list2)

print(list(zipped))

[('item1', 'item1'), ('item2', 'item2'), ('item3', 'item3')]

動作例2

list1 = ['item1','item2','item3']

zipped = zip(range(3), list1)

print(list(zipped))

[(0, 'item1'), (1, 'item2'), (2, 'item3')]

zip関数を使ってforループを作る場合は以下の様にします。

list1 = ['item1','item2','item3']
list2 = ['item1','item2','item3']

for e1, e2 in zip(list1, list2):
    print(e1, e2)

item1 item1
item2 item2
item3 item3

まとめ

  • 複数のシーケンス型オブジェクト(リスト、タプル、文字列、rangeオブジェクト)を対象にforループを回すときはzip関数を使用する

コメント