YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

python for rangeの使い方|Python超入門【第18回】

for文では主に次の2つの方法で、繰り返し処理を制御できます:

  1. リストや辞書型などから要素を1つずつ取り出して繰り返し
  2. range()関数で数列を作って繰り返し

今回は、2つ目のrange()関数でfor文を制御する方法について解説します。

1つ目のリストや辞書型から要素を取り出して繰り返す方法は、こちらで解説しています。

 

for i in range()の処理フロー:

range()関数は規則的な数列:

  • 0, 1, 2, 3, 4など

を作成することができます。

そのため、for文と組み合わせると、繰り返し処理を制御できます。

  • range()関数で数列を逐次生成
  • for文制御変数で数列の要素を1つ受け取る
  • 特定の処理を実行
  • 次の要素を受け取る⇒特定の処理を実行⇒次の要素⇒…

という処理フローになっています。

range()関数では、引数で数列の始点・終点や間隔を設定できます。

  • range(start, stop, step)
    • start ⇒ 始点(デフォルト値:0
    • stop ⇒ 終点
    • step ⇒ 数列の間隔(デフォルト値:1

この記事では、よくfor文と組み合わせて使用する:

  • range(stop)stop回繰り返し
  • range(start, stop)|制御変数startstop-1で繰り返し
  • range(start, stop, step)|制御変数をstep間隔で繰り返し

について使用方法を紹介していきます。

range(stop)|stop回繰り返す

引数にstopだけを与えると、range()0からstop-1までの連続する整数列を生成します。

  • range(stop)0, 1, …, stop-1
  • for文では制御変数にrange()の数列を1つずつ受けながら実行

 

  • 数列は0から始まるため、数列の要素数はstop
  • for文繰り返し回数もstop

stop = 3の例を見てみましょう。

for i in range(3):
  print(i)
 
# 0
# 1
# 2 
# ↑↑stop = 3は含まれていない↑↑

このとき終点stopの値は含まれない点に注意しましょう。

range(start, stop)|制御変数start⇒stop-1で繰り返し

引数を2つ与えることで、range()startからstop-1までの連続する整数列を生成します。

  • range(start, stop)start, start + 1, …, stop-2, stop-1
  • for文では制御変数にrange()の数列を1つずつ受けながら実行

start = 10, stop = 13の例を見てみましょう。

for i in range(10, 13):
  print(i) 
# 10
# 11
# 12 
# ↑stop = 13は含まれていない

このとき終点stopの値は含まれない点に注意しましょう。

range(start, stop, step)|制御変数をstep間隔で繰り返し

引数を3つ与えることで、
range()startからstop-stepまでのstep間隔の連続する整数列を生成します。

  • range(start, stop, step)start, start + step, …, stop-step
  • for文では制御変数にrange()の数列を1つずつ受ながら実行

start = 10, stop = 20, step = 2の例を見てみましょう。

for i in range(10, 20, 2):
  print(i)
 
# 10
# 14 
# 16 
# 18 
# ↑stop = 20は含まれていない

このとき、stopの値は含まれない点に注意しましょう。

stepを使用すれば、偶数列や奇数列、等差数列を簡単に生成することができます

for i in range(1, 20, 2):
  print(i, end=",")  # print()関数実行後の改行を回避
 
# 1,3,5,7,9,11,13,15,17,19,

等差数列とは隣り合う要素の差が一定間隔の数列です。

次の例では7ずつ増加しています。

for i in range(1, 31, 7):
  print(i, end=",")
 
# 1,8,15,22,29,

これを2重forループと組み合わせるとカレンダー風の出力もできます。

for i in range(1, 31, 7):
  for j in range(i,i+7):
   print(j, end=",")  # print()関数実行後の改行を回避
  print("\n")  # \nは改行を意味します
 
# 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,30,31,32,33,34,35,

これはformat文などで巧みに文字列を結合・操作すれば、もう少しキレイに表示できます。

とはいっても、pythonでカレンダーを画面に出力することはないと思います…。

カレンダー操作ならGoogle APIを使った方が楽しいです。

おわりに

今回はrange()関数とfor文を組み合わせる方法について紹介しました。

リストや辞書型から要素を取り出しながらfor文を回す方法は、こちらで紹介しています。

for文はリストやタプル、辞書型のメソッドと組み合わせることも多いです。

for文の中で、条件を満たした場合は、特殊な処理をするということも多く、条件分岐のif文との組み合わせも必然的に多いです。

Python超入門シリーズでは、pythonの基本を解説動画、図解付きで初心者の方向けに解説しています。

解説動画は楽しみながらpythonを学べる動画を目指しています動画チャンネル

Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。

気楽にツイートしているので、気軽にフォローしてください!