Python3.8.5でのzip関数について。
food = ['餃子', 'グラタン', 'コンビーフ']
drink = ['紅茶', 'コーヒー', 'レッドブル']
#①zip関数を使わない場合
for i in range(len(day)):
print(day[i], food[i], drink[i])
#②zip関数を使った場合
for days, foods, drinks in zip(day, food, drink):
print(days, foods, drinks)
#③パラメータの変数と戻り値用の変数の名前が同じ場合
for day, food, drink in zip(day, food, drink):
print(day, food, drink)
#④パラメータの変数が3つあるのに戻り値用の変数が1つしかない場合
for day in zip(day, food, drink):
print(day, food, drink)
#⑤パラメータの変数が3つあるのに戻り値用の変数が2つしかない場合
for day, food in zip(day, food, drink):
print(day, food, drink)
#⑥パラメータの変数が3つなのに戻り値用の変数が4つ以上ある場合
for day, food, drink, aaa in zip(day, food, drink):
print(day, food, drink)
①のパターンではzip関数を使わずにrange関数を使って処理していますが、「これだとiがいっぱいあって見ずらいじゃないか」、という感想をもつ人もいるらしいです。
zip関数は、そんな人のための関数です。
②のパターンのような形式でzip関数に指定したパラメータの数と同じ数の戻り値用の変数をinの前に用意することで、①と同じような出力結果を得ることができます。
上のプログラムの出力結果は、それぞれ以下のようになります。
①の出力結果
月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル
②の出力結果
月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル
③の出力結果
月曜日 餃子 紅茶
火曜日 グラタン コーヒー
水曜日 コンビーフ レッドブル
④の出力結果
('月曜日', '餃子', '紅茶') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('火曜日', 'グラタン', 'コーヒー') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
('水曜日', 'コンビーフ', 'レッドブル') ['餃子', 'グラタン', 'コンビーフ'] ['紅茶', 'コーヒー', 'レッドブル']
⑤の出力結果
エラー
⑥の出力結果
エラー
ご覧のように、zip関数のパラメータに指定した変数名と戻り値用の変数名がまったく同じ場合でも、Pythonは特に不具合なく正常に処理をおこなってくれます(③)。
しかし、zip関数に指定したパラメータの数と戻り値用の変数の数が一致しない場合は注意が必要です。
複数のパラメータに対して戻り値用の変数が1つしかない場合は、④の出力結果のようになってしまいます。
またその他の数が合わないパターンでは、⑤や⑥のパターンのように、おそらくすべてのパターンでエラーになることが予想されます。
以上です。