2021年5月16日日曜日

enumerate - python

■リストのインデックスを含めた値の取得


・インデックスを含めて取得

lsA = ['a', 'b', 'c', 'd', 'e']

for index, a in enumerate(lsA):
    print(index, a)

#出力
# 0 a
# 1 b
# 2 c
# 3 d
# 4 e
forを使いインデックスと値をまとめて抜き出せる

zip - python

■複数の配列をまとめて処理


・複数の配列から一度に要素を取得

lsA = [1, 2, 3, 4, 5]
lsB = ['a', 'b', 'c', 'd', 'e']

for a, b in zip(lsA, lsB):
	print(a, b)

#出力
# 1 a
# 2 b
# 3 c
# 4 d
# 5 e
 複数のリストから同時に値を取得

lsA = [1, 2, 3, 4, 5]
lsB = ['a', 'b', 'c', 'd', 'e']
lsC = ['あ', 'い', 'う']

for a, b, c in zip(lsA, lsB, lsC):
	print(a, b, c)

#出力
# 1 a あ
# 2 b い
# 3 c う
 リストの長さが違う場合、最小の長さで実行される

・最大の長さで実行


from itertools import zip_longest
lsA = [1, 2, 3, 4, 5]
lsB = ['a', 'b', 'c', 'd', 'e']
lsC = ['あ', 'い', 'う']

for a, b, c in zip_longest(lsA, lsB, lsC):
	print(a, b, c)

#出力
# 1 a あ
# 2 b い
# 3 c う
# 4 d None
# 5 e None
itertools.zip_longest()を使うと最大の長さで実行される
 足りない値はNoneで補填される

from itertools import zip_longest
lsA = [1, 2, 3, 4, 5]
lsB = ['a', 'b', 'c', 'd', 'e']
lsC = ['あ', 'い', 'う']

for a, b, c in zip_longest(lsA, lsB, lsC, fillvalue='fill'):
	print(a, b, c)

#出力
# 1 a あ
# 2 b い
# 3 c う
# 4 d fill
# 5 e fill
fillvalue=で補填する値を指定できる
 値は1つのみで、リストごとに別の値を指定することはできない