とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

zip関数について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5でのzip関数について。

day = ['月曜日''火曜日''水曜日']
food = ['餃子''グラタン''コンビーフ']
drink = ['紅茶''コーヒー''レッドブル']

#①zip関数を使わない場合
for i in range(len(day)):
  print(day[i], food[i], drink[i])


#②zip関数を使った場合
for daysfoodsdrinks in zip(dayfooddrink):
  print(daysfoodsdrinks)


#③パラメータの変数と戻り値用の変数の名前が同じ場合
for dayfooddrink in zip(dayfooddrink):
  print(dayfooddrink)


#④パラメータの変数が3つあるのに戻り値用の変数が1つしかない場合
for day in zip(dayfooddrink):
  print(dayfooddrink)


#⑤パラメータの変数が3つあるのに戻り値用の変数が2つしかない場合
for dayfood in zip(dayfooddrink):
  print(dayfooddrink)


#⑥パラメータの変数が3つなのに戻り値用の変数が4つ以上ある場合
for dayfooddrinkaaa in zip(dayfooddrink):
  print(dayfooddrink)

 

①のパターンではzip関数を使わずにrange関数を使って処理していますが、「これだとiがいっぱいあって見ずらいじゃないか」、という感想をもつ人もいるらしいです。

 

zip関数は、そんな人のための関数です。

②のパターンのような形式でzip関数に指定したパラメータの数と同じ数の戻り値用の変数をinの前に用意することで、①と同じような出力結果を得ることができます。

 

 

上のプログラムの出力結果は、それぞれ以下のようになります。

 

①の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

②の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

③の出力結果

月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル

 

④の出力結果

('月曜日', '餃子', '紅茶') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('火曜日', 'グラタン', 'コーヒー') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('水曜日', 'コンビーフ', 'レッドブル') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']

 

⑤の出力結果

エラー

 

⑥の出力結果

エラー

 

 

ご覧のように、zip関数のパラメータに指定した変数名と戻り値用の変数名がまったく同じ場合でも、Pythonは特に不具合なく正常に処理をおこなってくれます(③)。

 

しかし、zip関数に指定したパラメータの数と戻り値用の変数の数が一致しない場合は注意が必要です。

 

複数のパラメータに対して戻り値用の変数が1つしかない場合は、④の出力結果のようになってしまいます。

またその他の数が合わないパターンでは、⑤や⑥のパターンのように、おそらくすべてのパターンでエラーになることが予想されます。

 

 

以上です。