複数のリストについてそれぞれの要素の1番目を全部、2番目を全部…という順番で取り出したい


概要


forを使うとき

for i,j,k in zip(リスト1,リスト2,リスト3):

のような書き方で
aList[0],bList[0],cList[0],aList[1],bList[1],cList[1],aList[2]…
のような順番で取り出せる。
わかりにくいので例で示す。


aList = ["aa","bb","cc"]
bList = ["aaa","bbb","ccc","ddd","eee"]
cList = ["aaaa","bbbb"]

for i,j,k in zip(aList,bList,cList):
    print(i)
    print(j)
    print(k)

出力


aa
aaa
aaaa
bb
bbb
bbbb

説明


iがaListに相当
jがbListに相当
kがcListに相当

しており

forの第1回目のループでは
print(aList[0])
print(bList[0])
print(cList[0])

forの第2回目のループでは
print(aList[1])
print(bList[1])
print(cList[1])

となる。
forは3回以上はループしない。
3回目のループではcList[2]の要素がないため不可能となるため。

間違えやすい問題


for i,j in zip(aList,bList,cList):
    print(i)
    print(j)
はエラーとなる。 for 〇,〇 in zip(△,△): の〇と△の数は必ず同じでなければならず、同じでないとエラーになる。
以下はエラーにならない。
aList = ["aa","bb","cc"]
bList = ["aaa","bbb","ccc","ddd","eee"]
cList = ["aaaa","bbbb"]

for i,j,k in zip(aList,bList,cList):
    print(i)
    print(j)
出力は aa aaa bb bbb となる