Pythonで複数リストの値を同時に取得するzip関数
- 公開日:2018/10/18
- 更新日:2018/10/19
- 投稿者:n bit
Pythonで複数のリストオブジェクトがあり、それぞれのデータを同時に取得して扱いたいときに便利な組み込み関数『zip関数』について解説。データとそれに紐付くラベルやインデックスを同時に扱いたい時によく利用します。
この記事は約 分で読めます。(文字)
zip関数とは
zip関数とは複数あるリストの値を同時に取得して扱いたいときに利用できる組み込み関数です。
例えば値に紐付くラベルのリストやインデックスリスト等があるとき、ラベルと値、インデックスと値といったように紐付けて同時に取得する場合にZip関数を使用します。
zip関数の使い方
では早速zip関数を使ってみましょう。zip関数は引数に2つ以上のリストオブジェクトを指定することができます。
扱いたいリストオブジェクトが2つの場合は、第1引数に1つ目のリストオブジェクト、第2引数に2つ目のリストオブジェクトを指定します。
zip(リストオブジェクト1, リストオブジェクト2)
zip関数を使って実際に複数のリストオブジェクトを同時に呼び出してみましょう。zip関数はリストオブジェクトのデータを連続で呼び出すため基本的にfor文とあわせて利用します。
ラベルデータと値をもつ2つのリストオブジェクトをzip関数でまとめて取得
ラベルデータを格納したリストオブジェクトと値を格納したリストオブジェクトをzip関数でまとめて取得してみます。返された値をprint関数で出力しました。
st_name = ['大川', '城山', '佐々木', '都築', '野本']
st_value = [95, 87, 76, 89, 92]
for name, value in zip(st_name, st_value):
print('氏名:{0} 点数:{1}点'.format(name, value))
出力結果
氏名:大川 点数:95点
氏名:城山 点数:87点
氏名:佐々木 点数:76点
氏名:都築 点数:89点
氏名:野本 点数:92点
ラベルと値が順番通りに紐付いて取得されていることが確認できます。
インデックスデータと値をもつ2つのリストオブジェクトをzip関数でまとめて取得
今度はラベルデータではなくインデックスデータで値と紐付けてzip関数でまとめて取得してみます。
完全な連番でのインデックスデータと紐付ける場合はリストオブジェクトを用意するよりもemulate関数で生成した方が良いのですが今回の事例のように完全な連番のインデックスデータでない場合はzip関数で出力する必要があります。
st_no = [1, 2, 5, 8, 10]
st_value = [95, 87, 76, 89, 92]
for no, value in zip(st_no, st_value):
print('No,:{0} 点数:{1}点'.format(no, value))
出力結果
No,:1 点数:95点
No,:2 点数:87点
No,:5 点数:76点
No,:8 点数:89点
No,:10 点数:92点
インデックスと値が順番通りに紐付いて取得されていることが確認できます。
3つ以上のリストオブジェクトの値をzip関数でまとめて取得
先ほどまでは2つのリストオブジェクトをまとめてzip関数で取得していましたが、次は3つ以上のリストオブジェクトの場合です。基本的なやり方は2つでも3つ以上でも変わりません。増えたリストオブジェクトを引数に指定していくだけです。
st_no = [1, 2, 5, 8, 10]
st_name = ['大川', '城山', '佐々木', '都築', '野本']
st_value = [95, 87, 76, 89, 92]
for no, name, value in zip(st_no, st_name, st_value):
print('No,:{0} 氏名:{1} 点数:{2}点'.format(no, name, value))
出力結果
No,:1 氏名:大川 点数:95点
No,:2 氏名:城山 点数:87点
No,:5 氏名:佐々木 点数:76点
No,:8 氏名:都築 点数:89点
No,:10 氏名:野本 点数:92点
インデックストとラベル、そして値が順番通りに紐付いて取得されていることが確認できます。
注意事項:各リストオブジェクトの要素数にズレがある場合
基本的にzip関数を利用する場合はすべてのリストオブジェクトの要素数を揃えておく必要があります。もしも各リストオブジェクトの要素数にズレがあった場合は最小の要素数に合わされ、それよりも多いリストオブジェクトの要素は全て無視されます。
st_name = ['大川', '城山', '佐々木']
st_value = [95, 87, 76, 89, 92]
for name, value in zip(st_name, st_value):
print('氏名:{0} 点数:{1}点'.format(name, value))
出力結果
氏名:大川 点数:95点
氏名:城山 点数:87点
氏名:佐々木 点数:76点
ラベルのリストオブジェクトの要素数(3つ)にあわせて値のリストオブジェクトの要素は4つ目から無視されているのが分かります。
複数のリスト要素をタプルでまとめたリストオブジェクトを取得
zip関数はfor文でまとめて値を取得していくしていくだけではなく複数のリストオブジェクトをタプルの要素にまとめて1つのリストオブジェクトに変換することもできます。
出力されたオブジェクトを以前学習したtype関数でもチェックしてみましょう。type関数の利用方法については下記のページをご参照ください。
Pythonでオブジェクトのデータ型を調べるtype関数【組み込み関数】
Pythonで各オブジェクトのデータ型を調べるときに利用する組み込み関数『type関数』について解説しています。本番環境よりは学習時によく利用される組み込み関数で、Pythonのプログラミング学習を進めていっている方は最初のうちよく利用するでしょう。
st_name = ['大川', '城山', '佐々木', '都築', '野本']
st_value = [95, 87, 76, 89, 92]
tu = list(zip(st_name, st_value))
print(tu)
print(type(tu))
出力結果
[('大川', 95), ('城山', 87), ('佐々木', 76), ('都築', 89), ('野本', 92)]
<class 'list'>
タプルの要素を持ったリストオブジェクトが生成されているのを確認できます。
リスト関数で出力しなかった場合はそのままzipオブジェクトとして生成されます。zipオブジェクトの中身はリスト化した時と同じでタプルが保持されています。
st_name = ['大川', '城山', '佐々木', '都築', '野本']
st_value = [95, 87, 76, 89, 92]
tu = zip(st_name, st_value)
print(tu)
print(type(tu))
出力結果
<zip object at 0x7f4351818608>
<class 'zip'>
オブジェクトのタイプがzipになっていることが確認できます。
今日のdot
zip関数は複数のリストオブジェクトをまとめて同時に取得することができる組み込み関数です。ラベルやインデックスデータと値を保管するリストオブジェクトが分かれている場合などに活用しましょう。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。