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