【脱python初心者】for文でrange(len())を使うな!

pythonのfor文を回す際に,for i in range(len(配列)))としてはいないでしょうか?

各要素のインデックス番号のみを取り出したいのであれば問題ないですが,とりあえず使っているという方が多いと思います

本記事ではenumerateやzipを使った,よりPythonらしい可読性のよいコードの書き方を解説します

目次

enumerateでインデックス番号と要素を同時に取り出す

pythonでfor文を書く際に,配列の各要素とインデックス番号を同時に取り出して処理したい場合があります

その際はenumerateを使用するときれいに取り出せます

for インデックス番号, 配列1の要素 in enumerate(配列)とすると,iにインデックス番号,nameに配列の各要素が出力されます

names = ['Taro', 'John', 'Hanako', 'Vegeta']

for i, name in enumerate(names):
    print(i, name)

# 0 Taro  
# 1 John  
# 2 Hanako
# 3 Vegeta

zipを使って2つ以上のリストを同時に回す

pythonのfor文で同時に何個かの配列を回したいという場合に,zipを使います

for 配列1の要素, 配列2の要素 in zip(配列1, 配列2)のようにzipの中に配列を順番に指定します

配列の要素数が同じではない場合,エラーがでてコードが止まります

names = ['Taro', 'John', 'Hanako', 'Vegeta']
powers = [35, 45, 23, 18000]

for name, power in zip(names, powers):
    print(f'{name}の戦闘力は{power}だよ')

# Taroの戦闘力は35だよ
# Johnの戦闘力は45だよ
# Hanakoの戦闘力は23だよ
# Vegetaの戦闘力は18000だよ

enumerateとzipを同時に使う

これまで用いた,enumerateとzipを同時に使います

for文で複数の配列を同時に回したいが,インデックス番号も欲しい際に使います

for インデックス番号, (配列1の要素, 配列2の要素) in enumerate(zip(配列1, 配列2))とすることで,よりかっこいいPythonコードができあがります

for i, (name, power) in enumerate(zip(names, powers)):
    print(f'{i}: {name}の戦闘力は{power}だよ')

# 0: Taroの戦闘力は35だよ
# 1: Johnの戦闘力は45だよ
# 2: Hanakoの戦闘力は23だよ
# 3: Vegetaの戦闘力は18000だよ

参考文献

enumerateからのzipはスーパーおしゃれです

可読性も向上するため,ぜひ使ってください

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次