Pythonでのキレイなfor文の書き方

  • Pythonのfor文ってどう書くの?
  • Pythonのfor文って何個か書き方あるけど、どれが一番綺麗な書き方なの?

そんな疑問を感じている方向けに、
Pythonらしい、きれいなfor文の書き方を解説していこうと思います。

これからPythonを学ぼうとしているPython初心者、

Pythonをキレイに書きたいPython中級者向けの記事になります。

この記事を読めば次のことがわかるようになります!

  • Pythonのfor文の書き方がわかる!
  • Pythonic※なfor文が書ける!

※PythonicとはPythonにふさわしいコーディングをする人の総称です。

開発現場などで、Pythonのfor文はこうやって書くんだよ!

こうすればシンプルに書けるんだよ!とドヤ顔できるようになります!

では解説していきます。

基本的なfor文の書き方

基本的なfor文は2種類です。

  • 整数でのループ
  • コレクションでのループ

整数でのループ

よくある10回分ループするときのfor文です。

このように単純に10回分(など)処理を行いたい場合はrange()を使用してfor文を書きます。

for i in range(10):
    print(i)
for i in [0,1,2,3,4,5,6,7,8,9]:
    print(i)
0
1
2
3
4
5
6
7
8
9

range(10)は10個分のリストを意味します。

print(range(10))とすると[0,1,2,3,4,5,6,7,8,9]が出力されます。

0~9までで10個分のリストになります。

コレクションでのループ

次はコレクションをfor文で処理する方法です。

他の言語ではforeach文と同様の動きとなります。

animalsというコレクションそれぞれに対して処理を行うときに使用します。

animals = ['dog', 'cat', 'lion', 'elephant']
for animal in animals:
    print(animal)
animals = ['dog', 'cat', 'lion', 'elephant']
for i in range(animals):
    print(animals[i])
dog
cat
lion
elephant

このように「for 変数 in コレクション」でコレクションのfor文を書く事ができます。

基本的なfor文の書き方は以上です。

次は、さらに応用的なfor文の書き方を紹介します!

応用的なfor文の書き方

応用的なfor文の書き方は以下の5つです。

  • 逆順のループ
  • ループ時にコレクションのキーと値を取り出す
  • 2つのコレクションを同時にループ
  • 辞書型のループ
  • リスト内包表記

逆順のループ

reversed()を使用することで逆順にfor文を回す事ができます。

animals = ['dog', 'cat', 'lion', 'elephant']
for animal in reversed(animals):
    print(animal)
elephant
lion
cat
dog

ループ時にコレクションのキーと値を取り出す

enumerateを使用することでコレクションのキーと値を取り出すことができます。

animals = ['dog', 'cat', 'lion', 'elephant']
for key,animal in enumerate(animals):
    print( str(key) + '--' +animal)
0--dog
1--cat
2--lion
3--elephant

ループ終了時の処理

elseを使用することでfor文終了時に行いたい処理を記載することができます。

注意点はbreakでfor文を抜けた場合はelse内の処理が行われない点です。

animals = ['dog', 'cat', 'lion', 'elephant']
for animal in reversed(animals):
    if animal == 'elephant' :
        print('break!!')
        break
    print(animal)
else:
    print('end for!!')
print('next step!!')

elephantがリスト内にある場合、elseの処理は行われません。

dog
cat
lion
break!!
next step!!

リストからelephantを消すと、elseの処理が行われます。

dog
cat
lion
end for!!
next step!!

2つのコレクションを同時にループ

zip()を使用することで2つのコレクションを同時にループさせることができます。

animals = ['dog', 'cat', 'lion', 'elephant']
scale = ['small', 'middle', 'large']
for animal, scale in zip(animals, scale):
    print( animal + ' is ' + scale)
dog is small
cat is middle
lion is large

注意点は、ループの数がコレクションの数が少ない方になる点です。

この例であればlionまで処理が行われますが、elephantは処理が行われません。

辞書型のループ

辞書型のループを紹介します。

辞書型とはキーと値の形式で保持されているコレクションです。

辞書型.items()でループ用のイテレータが取得でき、for文に使用することができます。

dic = {'dog': 'small', 'cat': 'middle', 'lion': 'large', 'elephant': 'superLearge'}
for animal, scale in dic.items():
    print( animal + ' is ' + scale)
dog is small
cat is middle
lion is large
elephant is superLearge

リスト内包表記

for文を使用して別のリストを作成したい場合などに使用します。

例えば、以下のようにaのリストの要素全てを2倍にして
別のリストを作成することができます。

a = [1, 2, 3]
result = [x * 2 for x in a]
print(result)
[2, 4, 6]

以上。