Python for文の書き方を初心者向けに徹底解説!

Pythonのfor文とは?同じ処理を繰り返したい場合に知っておきたいfor文の書き方

和田 康宏

和田 康宏

開発エンジニア/新卒6期/ボールド歴4年3ヶ月

Pythonにおいて同じ処理を繰り返したい場合、for文を使って処理を行うことがあります。

Pythonにおけるfor文は、イテラブルオブジェクトの要素を1つずつ取り出して処理を繰り返すのが基本となります。

しかし、Pythonで用意されている様々な関数を組み合わせることができるので、使用例は多岐にわたります。

本記事ではfor文の基本的な書き方と様々な使用例を解説します。

One dayインターン

1.Pythonにおけるfor文について

まずは、Pythonにおけるfor文がどういうものかを解説します。

1-1.イテラブルオブジェクトの要素を1つずつ取り出して繰り返す

Pythonにおけるfor文はイテラブルオブジェクトの要素を1つずつ取り出すことによって繰り返し処理を実現します。イテラブルオブジェクトとは、リスト、タプル、辞書などの「繰り返し可能なオブジェクト」のことを指します。また、後述するrange()関数やzip()関数などの様々な関数によって生成されたオブジェクトも1つずつ取り出して処理を行えます。


2.for文の基本的な書き方

続いて、最も基本的なfor文の書き方を解説します。

2-1.イテラブルオブジェクトを指定して、処理内容はインデントする

for文の書き方は以下の通りです。

for 変数 in イテラブルオブジェクト:
    処理内容

inの後にイテラブルオブジェクトを指定し、コロン「:」を入力してください。するとforの後ろの変数に、指定されたイテラブルオブジェクトの要素が1つずつ格納され、処理内容に記載された処理が実行されます。このとき、処理内容は必ずインデントしてください。そうしないと、繰り返す処理内容と認識されないだけでなく、エラーとなってプログラムが止まってしまいます。

2-2.リストを用いた基本的な書き方

では、上記を具体的なソースで解説します。ここでは、イテラブルオブジェクトのうち、リストを用いたソースコードの例を記載します。

places = ["東京","神奈川","千葉","埼玉"]

for place in places:
    print(place + "に行きました")

実行結果

事項結果1

ここでは、1行目で記述したplacesというリストを、3行目から始まるfor文のinの後ろで指定しています。すると、placesから1つずつ取り出して変数placeに格納し、4行目で「に行きました」という文字をつけて出力させています。4行目の繰り返し処理は、places4つの要素が格納されているため、4回繰り返されます。このとき、4行目以降の繰り返す処理内容は必ずインデントして記述してください。

2-3.breakを用いて途中で処理を抜ける

今度は繰り返し処理を最後まで実行せず、途中で処理を抜ける方法を紹介します。そのためには、breakを使用します。下記のソースを見てください。

places = ["東京","神奈川","千葉","埼玉"]

for place in places:
    if place == "神奈川":
        break
    print(place + "に行きました")

実行結果

実行結果2

先ほどとほぼ同じソースですが、4行目にif文が、5行目にbreakが記述されています。これは、「placeが神奈川だったら繰り返し処理を抜けろ」という意味です。従って、places1番目は「東京」なので1回目の繰り返しは実行されて6行目のprint文は実行されますが、places2番目が神奈川なので2回目の繰り返しの時点でbreakが実行され、繰り返し処理を抜けます。従って、実行すると「東京に行きました」と出力されるのみです。このように、特定の条件で繰り返し処理を抜けたいときにbreakが用いられます。

2-4.continueを用いて途中で処理を飛ばす

今度は繰り返し処理の途中で処理を飛ばしたい場合の記述方法を紹介します。そのためには、continueを使用します。以下のソースを見てください。

places = ["東京","神奈川","千葉","埼玉"]

for place in places:
    if place == "神奈川":
        continue
    print(place + "に行きました")

実行結果

実行結果3

breakで紹介したソースとほぼ同じですが、今度は5行目にcontinueを使用しています。すると、1回目の繰り返し処理では6行目のprint文が実行されますが、2番目の繰り返しでplaceが神奈川のときにcontinueが実行されます。すると、6行目のprint文は飛ばされ、3回目の繰り返し処理に移ります。従って、実行結果は「東京に行きました」、「千葉に行きました」、「埼玉に行きました」の3行が出力されます。

2-5.elseを用いて繰り返し終了後の処理を記述する

繰り返し終了後に何らかの処理を実行したい場合、elseを用いれば可能です。以下のソースを見てください。

places = ["東京","神奈川","千葉","埼玉"]

for place in places:
    print(place + "に行きました")
else:
    print("繰り返し終了")

実行結果

実行結果4

ここでは、4行目のprint文を4回繰り返した後、5行目にelse:を挟んで6行目のprint文が実行されています。このように、繰り返し処理を記述した部分の直下にelse:と記述すれば、繰り返し処理終了後の処理を記述できます。ただし、breakで処理を抜けてしまうと、else:で記述した内容は実行されないので注意してください。


3.for文の様々な書き方

以上に記述したのがfor文の基本的な書き方となりますが、それ以外にもPythonでは様々な書き方を実現することができます。繰り返したい処理内容に応じて使い分けてください。

3-1.スライスを用いてオブジェクトの一部要素のみを取り出す

スライスを用いてオブジェクトの一部要素のみを取り出して繰り返し処理を実行する方法を紹介します。スライスとは、リストやタプルなどの一部分を、インデックスを指定して切り取る方法です。基本的な書き方は下記です。

obj[開始位置:終了位置:増分]

上記の書き方をすることで、開始位置から終了位置までの値を、何個おきに取得するかを指定することができます。尚、開始位置と終了位置はインデックスを指定するのですが、最初の値は0から始まることに注意してください。これを応用すれば、下記のような繰り返し処理を実現できます。

places = ["東京","神奈川","千葉","埼玉"]

for place in places[0:3:2]:
    print(place + "に行きました")

実行結果

実行結果5

注目すべきは3行目のplaces[0:3:2]の部分です。これは、placesに格納されている最初の値からインデックス3に格納されている値を、増分2ずつ(つまり、1つおきに)取得して、その値を用いて繰り返し処理を実行しています。従って、placesの東京と千葉が取り出されて繰り返し処理が実行され、上記のような実行結果になります。以上のように、オブジェクトの一部要素を取得して繰り返し処理を実行したい場合、スライスを用いれば簡単に実行することができます。

3-2.range()関数で繰り返す回数を明示的に指定する

Pythonのfor文ではイテラブルオブジェクトを1つずつ取り出して繰り返すので、「何回繰り返すか」を指定したい場合はrange()関数を使用します。range()関数とは、連続した数値のオブジェクトを生成するための関数です。例えば、

range(5)

と記述すると、04までの5つの値を持つオブジェクトを生成できます。これを用いると、下記のような繰り返し処理を実現できます。

for i in range(5):
    print("Engineer.club")

実行結果

実行結果6

これは、1行目のinの後ろにrange(5)を指定しており、04までの5つの値を持つオブジェクトが生成されます。これによって、「Engineer.club」を出力される処理が5回繰り返されます。range()関数は、あくまでも連続した値を持つオブジェクトを生成するための関数なのですが、上記のように繰り返し処理に用いるオブジェクトにrange(5)を指定すると5回繰り返すことが可能なので、何回繰り返すかを明示的に指定したいときにrange()関数が用いられることが多いです。

3-3.zip()関数で複数のイテラブルオブジェクトを処理する

複数のイテラブルオブジェクトを同時に繰り返し処理に用いる簡単な方法があります。それは、zip()関数を用いることです。zip()関数は、複数のイテラブルオブジェクトをまとめることができる関数です。例えば、以下のように用います。

places = ["東京","神奈川","千葉","埼玉"]
kanaPlaces = ["トウキョウ","カナガワ","チバ","サイタマ"]

for place, kanaPlace in zip(places,kanaPlaces):
    print(place + "の読み方は" + kanaPlace + "です")

実行結果

実行結果7

これは、zip()関数内で指定されているplaceskanaPlacesというオブジェクトに格納されている要素を1つずつ取り出しながら繰り返し処理を実行しているため、上記のような実行結果になります。このように、zip()関数を用いれば簡単に複数のイテラブルオブジェクトを同時に繰り返し処理に使用することができます。

3-4.enumerate()関数で要素とインデックスを同時に取得する

enumerate()関数は、指定されたイテラブルオブジェクトに対してインデックスを付与したイテラブルオブジェクトを生成する関数です。これも繰り返し処理に用いることが可能です。

places = ["東京","神奈川","千葉","埼玉"]

for i, place in enumerate(places):
    print(i,place)

実行結果

実行結果8

enumerate(places)とすることで、変数iにインデックスが、placeに値が格納されて、それぞれ出力される処理が繰り返されます。尚、インデックスを取得するのですが、デフォルトだと初期値が0となってしまいます。このときに、enumerate(places,1)とすることで、初期値を1とすることが可能です。このことにより、下記のような処理を実現できます。

places = ["東京","神奈川","千葉","埼玉"]

for i, place in enumerate(places,1):
    print(str(i) + "番目に" + place + "に行きました")

実行結果

実行結果9

0から始まるのでは不自然な場合でも、初期値を1にすれば上記のような処理が可能となります。このように、enumerate()関数を使えば要素とインデックスを簡単に取得して処理を行うことが可能です。

3-5.reversed()関数で要素を後ろから取得する

イテラブルオブジェクトの要素を先頭からではなく、後ろから取得したいときは、reversed()関数を用いれば簡単に実現できます。以下のソースを見てください。

places = ["東京","神奈川","千葉","埼玉"]

for place in reversed(places):
    print(place + "に行きました")

実行結果

実行結果10

inの後ろにreversed(places)を指定することで、places内の要素を後ろから取得しています。そのため、最初に埼玉が表示され、最後に東京が表示されます。このように、イテラブルオブジェクトの要素を後ろから取得したいときは、reversed()関数を用いれば簡単に実現できます。

3-6.リストの中でfor文を実行する(リスト内包表記)

Pythonでは、リストの中でfor文を実行し、新しいリストを作成する「リスト内包表記」と呼ばれる書き方があります。基本的な書き方は下記です。

[処理 for 変数 in イテラブルオブジェクト]

通常のfor文と同じように、イテラブルオブジェクトに格納された値を1つずつ取り出して処理を行い、その結果を新しいリストを生成します。それを用いると、例えば以下のような処理を実現できます。

title = ["e","n","g","i","n","e","e","r","c","l","u","b"]
upperTitle = [i.upper() for i in title]
print(upperTitle)

実行結果

実行結果11

これは、2行目でtitleに格納された要素をすべて大文字にしてupperTitleに格納するという処理を行っています。3行目のprint文でupperTitleの要素を出力するとすべて大文字で出力されていることがわかります。このように、for文を用いて新たにリストを作成する処理はリスト内包表記を用いるとたった1行で作成できます。


4.さいごに

Pythonにおけるfor文の書き方と使用例を解説しました。これらだけではなく、紹介した例を組み合わせると実現できる処理の幅は無限に広がります。試行錯誤を繰り返すことによってスキルアップにつながるので、ぜひ様々な処理の仕方を試してみてください。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン