Python の zip関数でfor文中にインデックスをつける

for v in ~ を書いていて、forループ内で展開された値の他にループカウンタ
orループインデックスが欲しい時がある。

range() でリストの長さ len() と、リストを zip() でまとめれば良い。

alist = ['A','B','C']
for v,i in zip(alist, range(len(alist))):
    print('%d -> %s' % (i, v))
0 -> A
1 -> B
2 -> C

そうでなくて、、enumerate を使えば、

print('===========================')
list = ['A', 'B', 'C']
for i, v in enumerate(list):
    print('%d -> %s' % (i, v))


zip のおさらい。

alist = ['A', 'B', 'C']
values = [10, 20, 30]
for t, v in zip(alist, values):
    print(t, v)
A 10
B 20
C 30

不足する分は、無視される。

alist = ['A','B','C']
values = [ 10, 20 ]
for t, v in zip(alist, values):
    print(t, v)
A 10
B 20

zip_longest を使うと
不足する分は、None になる

from itertools import zip_longest

alist = ['A','B','C']
values = [ 10, 20 ]
for t, v in zip_longest(alist, values):
    print(t, v)
A 10
B 20
C None

zip_longest で、不足する分を埋める時は、fillvalue で指定する

for t, v in zip_longest(alist, values, fillvalue=0):
    print(t, v)
A 10
B 20
C 0