お役立ち情報

【Python入門】pythonのfor文の使い方をマスターしよう

Pythonのfor文

Pythonに限った話ではありませんが、for文はプログラミング言語全般において超重要概念です。そのため、Pythonをベースに理解しておけば他のプログラミング言語を学習する際にも楽になります。for文の概念が登場しないプログラミング言語はまずありません。

そこでこのページでは、Pythonのfor文の基本的な書き方から、breakやcontinueを用いたちょっとした応用まで解説します。

Pythonのfor文記述方法

まずPythonのfor文の基本的な書き方ですが、以下のようになります。

for 変数 in オブジェクト:
     実行する処理

他のプログラミング言語のfor文を見たことのある方は、Pythonのfor文が少し特殊な書き方をしていることに気付かれたかと思います。文法だけだとわかりにくいかと思うので、サンプルコードを見てみましょう。

animals = ['dog', 'cat', 'bear']
for a in animals:
     print (a)

宣言部分等は省略しています。上記のソースコードを実行すると、以下のようにコンソール出力されます。

dog
cat
bear

Pythonは全体的にコードがシンプルですが、for文についても簡略化されています。初期値やインクリメントの記述をしなくても、変数と配列だけ指定すれば配列分勝手にループを回してくれます。

C言語やJavaの経験がある方からすると、Pythonの魅力を一つ発見されたかもしれません。また他の言語では初期値とインクリメントを設定する場合が多いですが、Pythonの場合以下のような方法でカウントを出力できます。

for num in range(10):
     print(num)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

0
1
2
3
4
5
6
7
8
9
10

このようにrangeで数を指定できます。引数が一つだと上のように0からカウントされますが、引数を二つ設定することで0以外の数値から出力することも可能です。

for num in range(10, 20):
     print(num)

このように記述すれば、以下のようにコンソール出力されます。

10
11
12
13
14
15
16
17
18
19
20

10~20の数字が出力されました。またrangeのなかでインクリメントする数を指定することも可能です。

for num in range(0, 10, 3):
     print(num)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

0
3
6
9

3つ目の引数がインクリメントする数になっているため、3ずつインクリメントしています。

for文の応用的な使い方

Pythonのfor文の基本は上記の通りですが、次にbreakやcontinueを用いた応用的な用法について解説します。応用と言っても特別難しいものではないので、頭を悩ませることはないかと思います。

breakの使い方

for文のなかでbreakを使用するサンプルコードは以下のようになります。

for num in range(30):
     print num
          if num == 10
               break

上記のソースコードを実行すると、以下のようにコンソール出力されます。

0
1
2
3
4
5
6
7
8
9
10

for文のなかにif文がありますが、カウントが10に来たタイミングでif文に入ります。そこでbreakが実行され、ループを抜け出します。ループを抜けた後は戻ることはないため、カウントは10で終了しています。

continueの使い方

continueを使用したサンプルコードは以下です。

for num in range(2, 10):
     if num % 2 == 0:
          print("偶数", num)
          continue
     print("奇数", num)

上記のソースコードを実行すると、以下のようにコンソール出力されます。

偶数 2
奇数 3
偶数 4
奇数 5
偶数 6
奇数 7
偶数 8
奇数 9

偶数の場合if文に入るため、偶数 数字、という形で出力されます。しかし、if文のなかにcontinueがあるのでそれ以降のコードは実行されずに次のループに入ります。つまり奇数 数字、という出力は実行されません。

逆に奇数の場合if文には入らないため、奇数 数字、が出力されます。breakの場合ループ処理そのものを終了されますが、continueの場合ループをいったん抜けて移行の処理を行わないだけで、次のループは回ります。

for-else文の使い方

else文はif文と対比させて使うものですが、構成上for文と対比させるような記述方法を取ることも可能です。システム的にはif文と対応しているのですが、インデント上、ロジック上はfor文と対比させるようなイメージです。実際のサンプルコードを見てみましょう。

scores = [200, 150, 250, 101, 290] # 100点以下はないので合格
for score in scores:
     if score <= 100:
     print('不合格')
          break
else:
     print('合格')

ボーリングのスコアをイメージして書いたものですが、100点以下の人が一人でもいると不合格になってbreakする仕様になっています。ループしながら一人ずつ判定していきますが、100点以下でない場合は「合格」と出力します。

実際のボーリングのプロ試験はアベレージ200以上でないといけなかったと記憶していますが、上記のプログラムは遊びのボーリングなので100点以上で合格になっています。またインデントについてですが、forとelseが対比する形になっています。

プログラミング的には後ろのelseはif文と対応しています。なぜなら、for文のなかでif文に入らなかったときに実行されるからです。しかし人間の思考的にはfor文と対応させて考えた方がわかりやすいため、for文と対応するインデントになっています。

enumerateの使い方

配列の要素と一緒にインデックスも取得したい場合、enumerateを使用します。具体的には以下のようになります。

l = ['Takeshi', 'Masaki', 'Kasumi']
for i, name in enumerate(l):
     print(i, name)
# 0 Takeshi
# 1 Masaki
# 2 Kasumi

このようにenumerateを使用することで、要素にナンバリングして出力されました。

zipの使い方

zipは要素を複数の変数として取得するための関数です。具体的には以下のように使用します。

names = ['Takeshi', 'Masaki', 'Kasumi']
ages = [40, 50, 30]
for name, age in zip(names, ages):
     print(name, age)
# Takeshi 40
# Masaki 50
# Kasumi 30

このように、zipを使用することで名前と年齢の両方を出力しました。もともとは別の配列に入っていたものをまとめて出力可能です。同じ方法で、3つ以上の要素を出力することも可能です。

また、enumerateとzipを組み合わせて使用することもできます。そうすると以下のようになります。

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for i, (name, age) in enumerate(zip(names, ages)):
     print(i, name, age)
# 0 Takeshi 40
# 1 Masaki 50
# 2 Kasumi 30

このように、番号、名前、年齢を表示できます。他にもfor文と組み合わせて使える関数は存在しますが、まずは基本的な用法を押さえておけば問題ないかと思います。

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ