※この記事にはプロモーションが含まれています。

11. 繰り返し処理(For文)

図解!Python for ループ文の徹底解説(配列、範囲指定、条件分岐、複数の変数など)

更新日:

for文とは、ある処理を決められた回数実行したい、あるリスト(配列)やタプルなどのオブジェクトから順にデータを取り出して処理をしたいという時に利用します。
 
この記事では、Pythonにおけるforループ文の使い方を初心者向けに解説しております。for文の定義方法や注意点、rangeを用いた指定回数の繰り返し処理など、for文についてはこれだけを読んでおけば良いよう、徹底的に解説しています。
 

 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数8,500本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

Pythonにおけるfor文の書き方

for文の書き方は以下のとおりで、オブジェクトから要素を順に変数に代入していき、要素の数だけ処理を繰り返します。オブジェクトには、リスト(配列)、タプル、文字列などを指定することができます。

for 変数 in オブジェクト:
      処理1
      処理2

for文に含まれる処理は、インデント(字下げ)して記述します(通常、インデントには半角スペース4つが使われます。)。処理が複数行ある場合も、全てインデントします。インデントが終わると、for文の一連の処理は終わります。またオブジェクトの後には、必ず :(コロン)を付けてください。
Pythonのforでlist(配列)に格納された複数の要素を順番に取得
 
 
オブジェクトとして、a、b、cの3つの要素が格納されたリストのfor文の処理イメージは次のようになります。
Pythonのforでlist(配列)に格納された複数の要素を順番に取得
 
Pythonのforでlist(配列)に格納された複数の要素を順番に取得
 
以降、リストの要素が無くなるまで、順に処理が実行されます。この例では、要素「c」が変数に格納され、処理1~3まで実行されれば、for文が終了します。
 
Pythonのforでlist(配列)に格納された複数の要素を順番に取得

 
for文とwhile文は同じ繰り返し処理ですが、次の点が異なります。

  • for文は回数を指定して、指定した回数分の繰り返し処理を行います。
  • 一方でwhile文は、条件を指定して、その条件がTrueの間は繰り返し処理を行い、Falseになれば繰り返し処理を抜けます。

while文の詳しい説明は、「図解!Python while文のループ処理を徹底解説!」を参照ください。

 
 

Pythonにおけるfor文の使い方の例

for文の使い方に関する例をいくつか見ていきましょう。
 

リスト(配列)

リスト(配列)に格納された数値4、3、12を順に変数i へ代入していき、変数numに加算します。最後に変数numを確認すると、リスト(配列)の数値が合計された値19(= 4 + 3 + 12)が表示されました。

In [1]: num = 0
...: for i in [4, 3, 12]:
...:       num = num + i
...: num
Out[1]: 19

 

タプル

先ほどの例について、リスト(配列)では無く、同じ数値(4, 3, 12)を格納したタプルを利用しても同様の結果になります。

In [2]: num = 0
...: for i in (4, 3, 12):
...:       num = num + i
...: num
Out[2]: 19

 

文字列

文字列’Hello’を順に1文字ずつ変数charへ代入していき、printで表示すると、1文字ずつ’H’、’e’、’l’、’l’、’o’と表示されました。

In [3]: for char in 'Hello':
...:       print(char)
Out[3]: H
            e
            l
            l
            o

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数8,500本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

for文における範囲指定の繰り返し処理 (range)

またfor文において、範囲を指定し、定められた回数だけ繰り返しを行いたい場合にはリストの章で説明したrangeを使うと便利です。

rangeは指定した長さの、連続した整数のリストを自動で生成する関数ですので、for文とrangeを組み合わせることで、範囲を指定し任意の回数だけループをすることができます。
 
 
rangeに対しては、開始値、終了値、増減量を引数として渡してあげると、その法則に則った数値を含むリストを自動的に作成してくれます。

range([開始値,] 終了値 [, 増減量])

開始値、増減量は省略することも可能です。その場合は、開始値は0、増減量は1とみなされます。また終了値はインデックスと同様、その数値は含まれません。
 
 

それでは、for文におけるrangeの使用例を見ていきましょう。
 

rangeでの終了値のみの指定(0~終了値-1)

rangeの引数に5を渡すことで、0から4までの値のリストが自動的に作成され、順に値を読み込むことで、指定した回数分、処理を繰り返すことができます。ここでは順に読み込まれたリストの値をprintで表示しています。

In [4]: for i in range(5):
...:       print(i)
Out[4]: 0
            1
            2
            3
            4

 

rangeでの開始値、終了値の指定(開始値~終了値-1)

またリストの章で説明したように、rangeは始まりから終わりまでの範囲を指定できます。次の例は、3から6までの値を格納したリストを順に読み込み、値をprintで順に表示しています。

In [5]: for i in range(3,7):
...:       print(i)
Out[5]: 3
            4
            5
            6

 
for文でrangeの利用方法の詳しい説明は、「Python for 文でのrangeによる指定回数の繰り返し処理」を参照ください。

 
 

条件によりfor文の繰り返し処理を抜ける方法 (break)

またfor文において、繰り返し処理の途中で特定の条件を満たした場合、繰り返し処理を抜けたい時には、breakを使います。
pythonにおけるforでbreakによりループを途中から抜ける方法
 
それでは、for文におけるbreakの使用例を見ていきましょう。
 
rangeにより、0から4まで順に変数iに代入され、処理を繰り返していますが、if文で変数iが2の場合、breakが実行されます。

In [6]: for i in range(5):
...:      if i == 2:
...:          break
...:      print(i)

 
実行結果では、printで表示された変数iの値は、0、1で止まっており、2の所で繰り返し処理が終わったことがわかります。

Out[6]: 0
            1

 
 

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
発売数8,500本突破を記念して、今だけ期間限定で87%オフの大セール中!!!

条件によりfor文の繰り返し処理をスキップする方法 (continue)

一方で、for文において、ある特定の条件を満たした場合、その要素の処理をスキップし、次の要素の処理へ移りたい時には、continueを使います。
pythonにおけるforでcontinueによりループの処理を途中からスキップする方法
 
for文におけるcontinueの使用例は、次のようになります。
 
rangeにより、0から4まで順に変数iに代入され、処理を繰り返していますが、if文で変数iが2の場合、continueが実行され、以降の処理がスキップされます。その後、3、4と処理が続きます。

In [7]: for i in range(5):
...:      if i == 2:
...:          continue
...:      print(i)

 
実行結果では、printで表示された変数iの値は、0、1、3、4と、2の処理がスキップされたことがわかります。

Out[7]: 0
            1
            3
            4

 
 

for文の処理が終わった後に特定の処理を実行する方法 (for else)

for文のよる繰り返し処理が全て実行された後に特定の処理を行いたい場合はelseを利用します。通常はbreakと合わせて利用し、for文の繰り返し処理が全て実行された場合には特定の処理が実行され、for文の処理がbreakにより抜けた場合は、特定の処理は実行しないというように使います。
 
elseの記述方法は、次のとおりです。

for 変数 in オブジェクト:
      処理1
      処理2
else:
      処理3

for文の後にelseを記述します。else文に含まれる処理は、インデント(字下げ)して記述します(通常、インデントには半角スペース4つが使われます。)。処理が複数行ある場合も、全てインデントします。またelseの後には、必ず :(コロン)を付けてください。
pythonのfor文の処理が終わった後に特定の処理を実行する方法 (python for else)。またbreakにより抜けた場合は、処理を実行しない。
 
それでは、for文におけるelseの実行例を見ていきましょう。
 
rangeにより、0から4まで順に変数iに代入され、処理を繰り返していますが、if文で変数iが2の場合、breakが実行されます。

In [8]: for i in range(5):
...:      print(i)
...:      if i == 2:
...:          print("for文の処理はbreakしました。")
...:          break
...: else:
...:      print("for文の処理は全て終了しました。")

 
実行結果では、printで表示された変数iの値は、0、1で止まっており、2の所で繰り返し処理が終わったことがわかります。

Out[8]: 0
            1
            2
            for文の処理はbreakしました。

 
 
今度はif文の条件を変数iが6の場合、breakに変更してみましょう。

In [9]: for i in range(5):
...:      print(i)
...:      if i == 6:
...:          print("for文の処理はbreakしました。")
...:          break
...: else:
...:      print("for文の処理は全て終了しました。")

 
この場合はfor文の処理は全て実行され、最後にelseの処理が実行されています。

Out[9]: 0
            1
            2
            3
            4
            for文の処理は全て終了しました。

 
 

for文で複数の変数・オブジェクトを同時に処理 (zip)

for文で複数の変数・オブジェクトを同時に処理したい時にはzipを利用します。複数のオブジェクトで要素数が異なる場合は、一番少ないものに合わせられます。
 
zipの記述方法は、以下のようになります。

for 変数1, 変数2,…, 変数n in zip(オブジェクト1, オブジェクト2, …, オブジェクトn):
      処理1
      処理2
      処理3

 
オブジェクトとして2つのリストを元に、zipを利用したfor文の処理イメージは次のようになります。オブジェクトとして、リスト1、リスト2があり、それぞれリスト1にはa1、b1、c1、リスト2にはa2、b2、c2の3つの要素が格納されています。
Pythonのforでlist(配列)に格納された複数の要素、インデックスをzipにより同時に取得
 
Pythonのforでlist(配列)に格納された複数の要素、インデックスをzipにより同時に取得
 
以降、リストの要素が無くなるまで、順に処理が実行されます。この例では、要素「c1」が変数1に、要素「c2」が変数2に格納され、処理1~3まで実行されれば、for文が終了します。
 
Pythonのforでlist(配列)に格納された複数の要素、インデックスをzipにより同時に取得
 
それでは、for文におけるzipの使用例を見ていきましょう。
 
zipの引数にリストname、salesを渡すことで、リストの値が順に、変数product_nm、product_salesに格納され、処理が繰り返されています。ここでは順に読み込まれたリストの値をprintで表示しています。

In [10]: name = ["Cooktops", "Dryers", "Ranges", "TV", "Washers"] # (1)製品名
....: sales = [124000, 60000, 70000, 133000, 12000] # (2)売上
....: for product_nm, product_sales in zip(name, sales):
....:       print(product_nm, product_sales)
Out[10]: Cooktops 124000
              Dryers 60000
              Ranges 70000
              TV 133000
              Washers 12000

 
 

for文で要素とインデックスを同時に取得する方法 (enumerate)

for文でリストやタプルなどのオブジェクトから、要素とインデックスを同時に取得したい場合、enumerateを利用すると非常に便利です。
 
enumerateは、次のように記述します。オブジェクトから取得したインデックスは変数1へ、要素は変数2へ格納されます。

for 変数1, 変数2 in enumerate(オブジェクト):
      処理1
      処理2
      処理3

 
それでは、for文におけるenumerateの使用例を見ていきましょう。
 
enumerateの引数にリストnameを渡すことで、リストのインデックスが、変数iに、要素が変数product_nmに格納され、処理が繰り返されています。ここでは順に読み込まれたリストの値をprintで表示しています。

In [11]: name = ["Cooktops", "Dryers", "Ranges", "TV", "Washers"] # (1)製品名
....: for i, product_nm in enumerate(name):
....:        print(i, product_nm)
Out[11]: 0 Cooktops
              1 Dryers
              2 Ranges
              3 TV
              4 Washers

 
 

for文でオブジェクトの要素を逆順で取得する方法 (reversed)

for文でオブジェクトの要素を逆から取得したい場合、reversedを用います。
 
reversedは、次のように記述します。オブジェクトから取得したインデックスは変数1へ、要素は変数2へ格納されます。

for 変数1, 変数2 in reversed(オブジェクト):
      処理1
      処理2
      処理3

 
オブジェクトにリストを用いた場合の通常のfor文と、reversedを用いたfor文との違いは、次のとおりです。
Pythonのforでlist(配列)に格納された複数の要素とインデックスを逆順に取得
 
for文におけるreversedの例を見ていきましょう。
 
reversedの引数にリストnameを渡すことで、逆から(”Washers”から)リストの要素が変数product_nmに格納され、処理が繰り返されています。ここでは順に読み込まれたリストの値をprintで表示しています。

In [12]: name = ["Cooktops", "Dryers", "Ranges", "TV", "Washers"] # (1)製品名
....:        for product_nm in reversed(name):
....:              print(product_nm)
Out[12]: Washers
              TV
              Ranges
              Dryers
              Cooktops

 
 

for文を1行でシンプルに書くリスト内包表記

for文を一行で記述し、for文から取得した要素をリストに格納することができます。

 
for文を一行で記述する方法は次のようになります。

[処理 for 変数 in リスト]

処理には通常、変数が用いられ、リストから順に取得した要素に対して何らかの処理を行います。そして、その結果がそのままリストに格納されます。

 
 
for文の中の処理の順番が変わり、わかりづらくなりましたので、通常のfor文との違いを、番号を付けて、確認しましょう。
 
通常のfor文の構成要素に番号を振ると次のようになります。
Pythonのforを1行で書くリスト内包表記
 
これをリスト内包表記で記述するには、次のように順番を変える必要があります。
Pythonのfor文を1行で書くリスト内包表記
3.の処理が一番前に来ています。

 
 
それでは、リスト内包表記の例を確認しましょう。
 
list1には[1,3,5,7]が格納されており、これらの各要素に対して2倍して1を加える場合、次のように記述します。

In [13]: list1 = [1,3,5,7] 
....: list2 = [ i * 2 + 1 for i in list1 ] 
....: print(list2) 
Out[13]: [3, 7, 11, 15]
[ i * 2 + 1 for i in list1 ]の処理の中で、最初はlist1の1番目の要素1が変数iに格納されます。そして1 * 2 + 1 = 3と計算された結果が、新たなリストの1番目の要素となっています。
 
次にlist1の2番目の要素3が変数iに格納され、3 * 2 + 1 = 7が、新たなリストの2番目の要素となります。
 
これらの計算をfor文でlist1の全ての要素に対して繰り返し、 結果として[3, 7, 11, 15]が出力されました。

 
 
このようにして、for文はリスト内包表記を使って、for文で計算・取得した要素を新たなリストに格納することができます。

 
 
 
 
関連記事です。
Pythonに関する重要なトピック全般について学んでいきたいと考えておられる方には、次のリンクをお勧めします。

 

 
 
 
最後に...


Pythonの学習においては、実際に様々なプログラムを書いて試していくことが非常に重要です。Pythonについて、さらに詳しく学ばれたい方は、以下の私のUdemy講座をご検討いただければ幸いです。


Pythonを用いて世界中のWebサイトから自動的にデータ収集する方法を、基礎からていねいに学ぶことができます。Pythonを初めて学ばれた方も、最初に取り組みやすい内容になっています。


>> Pythonによるビジネスに役立つWebスクレイピング
発売数8,500本突破を記念して大セール中!期間限定になりますのでお早めに。
Pythonによるビジネスに役立つWebスクレイピング(BeautifulSoup、Selenium、Requests)講座の画面

既に8,500名以上の方に受講頂き、大変好評です。またコースに満足いただけない場合でも、30日返金保証があるので安心です。

期間限定の割引クーポンは、こちらから!
>> Pythonによるビジネスに役立つWebスクレイピング
   
   





-11. 繰り返し処理(For文)

Copyright© ビジPy , 2024 All Rights Reserved.