【Python】for文で繰り返し処理を行う!基本から応用まで解説!
for文とは繰り返し処理であり、特定の条件が満たされるまで処理を何度も実行する構文になります。
繰り返し処理を使うと、数値や数式などを何回も書かなくて済みますので、非常に便利です。
そして、リストなどの複数のデータ型に使用すると、複数のデータ型の値を取得することができ、文字列に使用すると文字列の文字を取得することができるなどオブジェクトのデータを取り出すことができます。
また、Pythonではfor文と組み合わせて使用できる関数があり、関数を使用することで要素とインデックスを同時に取り出したり、複数の要素を同時に取り出したり、要素を逆から取り出すことができます。
今回はPythonのfor文の使い方について以下の内容でわかりやすく解説していきます。
⚫︎ for文とは
⚫︎ for文の基本的な使い方
⚫︎ for文の応用的な使い方
⚫︎ for文と組み合わせて使用できる便利な関数
⚫︎ for文の実践的な使い方
目次
for文とは
冒頭でも言いましたが、for文とは繰り返し処理であり、特定の条件が満たされるまで処理を何度も実行する文法になります。
for文の書き方
for文の書き方は以下のようになります。
1 2 |
for 変数 in オブジェクト: 実行する処理 |
for文はオブジェクトの中身を変数に格納し、オブジェクトの回数分、実行する処理を行うことができます。
変数には好きな名前を記述することができますので、「conut」や「i」など分かりやすい変数をつけると良いと思います。
また、for文は他のプログラミング言語でも使用することができますが、C言語やJavaの場合は以下のような書き方になります。
それに比べて、Pythonの場合は「for in」と記述するようになります。
C言語やJavaの場合
1 2 3 |
for (初期化式; 条件式; 変化式)) { // 処理内容 } |
for文の基本的な使い方
for文の基本的な使い方について紹介していきます。
同じ処理をまとめて行う
for文は同じ処理をまとめて行う場合に使用することができます。
例
1 2 |
for i in range(15): print('この処理を実行する') |
出力結果
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
この処理を実行する
for文によって同じ処理を繰り返して実行することができます。
また、for文を使用しないでコードを記述することもできますが、100回も同じコードを何回も書くとなった場合はとても面倒です。
しかし、for文を使用すると、このようにたったの2行で実行することができます。
オブジェクトのデータを取り出す
for文はリストやタプルの要素、辞書のキーや値、セットの値、文字列の文字などオブジェクトのデータを取り出すことができます。
まずは、リストの要素を取り出してみます。
⚫︎ リスト(list)の場合
1 2 3 4 |
print('・リストの要素を取り出す') siritori = ['リンゴ', 'ゴリラ, 'ラッパ'] for x in siritori: print(x) |
出力結果
・リストの要素を取り出す
リンゴ
ゴリラ
ラッパ
for文によってリストの要素を取り出すことができます。
もし、for文でリストの要素を取り出す方法について詳しく知りたい場合はこちらをご参考ください。
続いて、タプルの要素を取り出してみます。
⚫︎ タプル(tuple)の場合
1 2 3 4 |
print('・タプルの要素を取り出す') siritori = ('リンゴ', 'ゴリラ, 'ラッパ') for x in siritori: print(x) |
出力結果
・タプルの要素を取り出す
リンゴ
ゴリラ
ラッパ
for文によってタプルの要素を取り出すことができます。
続いて、辞書のキーや値を取り出してみます。
⚫︎ 辞書(dict)の場合
1 2 3 4 5 6 7 8 9 10 11 |
siritori = {1:'リンゴ', 2:'ゴリラ',3: 'ラッパ'} print('・辞書のキーのみを取り出す') for x in siritori.keys(): print(x) print('・辞書の値のみを取り出す') for y in siritori.values(): print(y) print('・辞書のキーと値の両方を取り出す') for z in siritori.items(): print(z) |
出力結果
・辞書のキーのみを取り出す
1
2
3
・辞書の値のみを取り出す
リンゴ
ゴリラ
ラッパ
・辞書のキーと値の両方を取り出す
(1, ‘リンゴ’)
(2, ‘ゴリラ’)
(3, ‘ラッパ’)
for文によって辞書のキーや値を取り出すことができます。
続いて、set型の値を取り出してみます。
⚫︎ set型の場合
1 2 3 4 5 |
siritori = {'リンゴ', 'ゴリラ','ラッパ', ('パンダ', 'ダルマ','マントヒヒ')} print('・set型の値を取り出す') for x in siritori: print(x) |
出力結果
・set型の値を取り出す
リンゴ
ゴリラ
ラッパ
(‘パンダ’, ‘ダルマ’, ‘マントヒヒ’)
for文によってset型の値を取り出すことができます。
続いて、文字列の文字を取り出してみます。
⚫︎ 文字列の場合
1 2 3 4 5 |
siritori = 'リンゴ#ゴリラ#ラッパ' print('・文字列の文字を取り出す') for x in siritori: print(x) |
出力結果
・文字列の文字を取り出す
リ
ン
ゴ
#
ゴ
リ
ラ
#
ラ
ッ
パ
for文によって一つ文字列から一文字ずつ取り出すことができます。
for文の応用的な使い方
for文の応用的な使い方について紹介します。
繰り返し処理をスキップをする
for文にcontinue句を使用すると繰り返し処理をスキップし、ブロックの先頭に戻るようになります。
例
1 2 3 4 5 |
print('・continue句で繰り返し処理をスキップ') for x in ["リンゴ", "バナナ", "オレンジ"]: if x == "バナナ": continue print(x) |
出力結果
・continue句で繰り返し処理をスキップ
リンゴ
オレンジ
for文にcontinue句を使用することで、処理をスキップしています。
その為、要素がバナナである場合は、print()関数が行われていません。
繰り返し処理を抜ける
for文にbreak句を使うことで、繰り返し処理の途中で強制的に終了することができます。
例
1 2 3 4 5 |
print('・break句で繰り返し処理を抜ける') for x in ["リンゴ", "バナナ", "オレンジ", "メロン"]: if x == "オレンジ": break print(x) |
出力結果
・break句で繰り返し処理を抜ける
リンゴ
バナナ
for文にbreak句を使用することで、繰り返し処理を抜けています。
その為、オレンジから後ろの要素はprint()関数が行われていません。
繰り返し処理の正常終了後に処理を行う
for文にelseを使うと、繰り返し処理が終了し、実行された後に何らかの処理を行うことができます。
例
1 2 3 4 5 |
print('・elseで繰り返し処理の正常終了後に処理を行う') for fruits in ["リンゴ", "バナナ", "オレンジ"]: print(fruits) else: print('elseを通って終了') |
出力結果
・elseで繰り返し処理の正常終了後に処理を行う
リンゴ
バナナ
オレンジ
elseを通って終了
elseによって繰り返し処理の正常終了後に処理を行っています。
その為、for文の終了後に「elseを通って終了」が表示されています。
繰り返し処理を一部の要素のみに行う
for文にスライスで範囲を指定することで繰り返し処理を一部の要素のみに行うことができます。
例
1 2 3 4 5 |
print('・スライスで範囲を指定する') alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] for a in alpha[1:5]: print(a) |
出力結果
・スライスで範囲を指定する
B
C
D
E
スライスによって繰り返し処理を一部の要素のみに行っています。
その為、BとCとDとEの要素のみ取り出されています。
多重の繰り返し処理を行う
for文は多重の繰り返し処理を行うことができます。
多重の繰り返し処理とは、for文の中にfor文がある処理のことを言います。
「多重ループ」とも呼ばれ、2つ目のfor文は、1つ目のfor文の処理ごとに実行されます。
例
1 2 3 4 5 6 7 |
fruitsA = ["リンゴ", "バナナ", "オレンジ"] fruitsB = ["キウイ", "パイナップル", "さくらんぼ"] for x in fruitsA: print('・fruitsAの要素を取り出す', x) for y in fruitsB: print(x, y) |
出力結果
・fruitsAの要素を取り出す リンゴ
リンゴ キウイ
リンゴ パイナップル
リンゴ さくらんぼ
・fruitsAの要素を取り出す バナナ
バナナ キウイ
バナナ パイナップル
バナナ さくらんぼ
・fruitsAの要素を取り出す オレンジ
オレンジ キウイ
オレンジ パイナップル
オレンジ さくらんぼ
for文の中にfor文を記述することで、処理多重の繰り返し処理を行っています。
その為、fruitsAの要素に対してfruitsBのリストがまとめて取り出されています。
for文と組み合わせて使用できる便利な関数
for文には組み合わせて使用できる便利な関数がありますので紹介していきます。
インデックスを取得する関数
for文にrange()関数を使用することでインデックスを取得することができます。
例
1 2 |
for i in range(10): print(i) |
出力結果
0
1
2
3
4
5
6
7
8
9
10
for文とrange()関数によって0〜10のインデックスを取得しています。
もし、range()関数について詳しく知りたい場合こちらをご参照ください。
要素とインデックスを同時に取得する関数
for文にenumerate()関数を使用することでリストなどの要素とインデックスを同時に取得することができます。
例
1 2 3 4 |
fruits = ["リンゴ", "バナナ", "オレンジ"] for i, fruits in enumerate(fruits): print(i, fruits) |
出力結果
0 リンゴ
1 バナナ
2 オレンジ
enumerate()関数によってリストから取り出した要素にインデックスが付与されています。
もし、enumerate()関数について詳しく知りたい場合はこちらをご参照ください。
オブジェクトの要素を逆順で取得する関数
for文にreversed()関数を使用することで、オブジェクトの要素を逆順で取得することができます。
例
1 2 3 |
fruits = ["リンゴ", "バナナ", "オレンジ"] for x in reversed(fruits): print(x) |
出力結果
オレンジ
バナナ
リンゴ
reversed()関数によって[“リンゴ”, “バナナ”, “オレンジ”]の要素を後ろから取得しています。
もし、reversed()関数について詳しく知りたい場合はこちらをご参照ください。
変数とオブジェクトを同時に処理する関数
for文にzip()関数を使用することで、複数のリストなどの要素を複数の変数としてまとめて取得することができます。
例
1 2 3 4 5 6 |
fruits = ["リンゴ", "バナナ", "オレンジ"] number = [4, 5, 6] for fruits, number in zip(fruits, number): print(fruits, number) |
出力結果
リンゴ 4
バナナ 5
オレンジ 6
for文にzip()関数を使言うことで、複数のリストなどの要素を複数の変数としてまとめて取得することができます。
もし、zip関数について詳しく知りたい場合はこちらをご参照ください。
for文の実践的な使い方
for文の実践的な使い方について紹介していきます。
ピラミッドを作成する
for文を使用することで、ピラミッドを作成することができます。
例
1 2 3 4 |
for i in range(1,10): for j in range(i): print('※',end='') print("") |
出力結果
※
※※
※※※
※※※※
※※※※※
※※※※※※
※※※※※※※
※※※※※※※※
※※※※※※※※※
for文を使用することで、ピラミッドが作成されました。
ゲームのマップを作成する
for文を使用することで、ゲームで出てくるようなマップを作成することができます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import tkinter as tk baseGround = tk.Tk() baseGround.title('マ◯オっぽいフィールド') canvas = tk.Canvas(width=256, height=256) canvas.pack() img = [ tk.PhotoImage(file="2021-01-13.png"), tk.PhotoImage(file='83526921_220x220.png') ] maps = [ [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [0, 0, 0 ,0, 0, 0 ,0 ,0 ], [1, 1, 1, 1, 1, 1 ,1, 1 ], [1, 1, 1, 1, 1, 1 ,1, 1 ] ] for x in range(8): for y in range(8): num = maps[y][x] canvas.create_image(x*32+16, y*32+16, image = img[num]) baseGround.mainloop() |
出力結果
for文を使用することで、某ゲームのような画面が作成されました。
これは、GUI画面を作成することができるtkinterを使用して作成していますが、多重の繰り返し処理を行うことで画像を縦横に敷き詰められて表示されています。
今回のポイント
for文で繰り返し処理を行う
⚫︎ for文は繰り返し処理であり、特定の条件が満たされるまで処理を何度も実行することができる
⚫︎ for文は同じ処理をまとめて行う場合に使用することができる
⚫︎ for文はオブジェクトのデータを取り出す場合に使用することもできる
(リストやタプルの要素、辞書のキーや値、セットの値、文字列の文字など)
⚫︎ for文にcontinue句を使用すると、繰り返し処理をスキップし、ブロックの先頭に戻る
⚫︎ for文にbreak句を使用すると、繰り返し処理の途中で強制的に終了する
⚫︎ for文にelseを使うと繰り返し処理の終了後に何らかの処理を行うことができる
⚫︎ for文にスライスで範囲を指定すると繰り返し処理を一部の要素のみに行うことができる
⚫︎ for文の中にfor文の処理があると、多重の繰り返し処理を行うことができる
⚫︎ for文とrange関数を使うことでインデックスを取得することができる
⚫︎ for文とenumerate()関数を使うことでリストなどの要素とインデックスを同時に取得することができる
⚫︎ for文にreversed()関数を使うことで、オブジェクトの要素を逆順で取得することができる
⚫︎ for文にzip()関数を使言うことで、複数のリストなどの要素を複数の変数としてまとめて取得することができる
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。