【Pythonの基本】forループの相棒!range()関数の使い方を徹底解説

こんにちは。ゆうせいです。

プログラミングを書いていると、「この処理を10回繰り返したいな」「リストの1番目から5番目まで順番に何かしたいな」といった場面が必ず出てきます。こうした「繰り返し処理」はプログラミングの基本中の基本ですよね。

Pythonではforループがその役割を担いますが、そのforループの能力を最大限に引き出してくれる最高の相棒が、今回ご紹介するrange()関数です!

一見シンプルですが、実は奥が深いrange()関数。その仕組みと使い方をマスターして、繰り返し処理を自由自在に操れるようになりましょう!

range()関数って、一体何者?

range()関数は、その名の通り、ある「範囲」の連続した整数を作り出してくれる機能です。

一番分かりやすい例えは、「整理券の発行機」かもしれません。

あなたが発行機に「5番から10番までの整理券をください」とお願いすると、5, 6, 7, 8, 9と書かれた整理券を順番に渡してくれる、そんなイメージです。

この「順番に連続したデータ」は、forループと組み合わせることで絶大な効果を発揮します。「この番号の整理券を持っている人から順番に処理する」といったことが、いとも簡単に実現できるのですよ。

使い方を3つのパターンで完全マスター!

range()関数の使い方は、引数(カッコの中に入れる情報)の数によって、主に3つのパターンに分けられます。一つずつ見ていきましょう!

パターン1: range(stop) - 終わりの数を指定する

最もシンプルな使い方が、カッコの中に数字を一つだけ入れる方法です。これは「0から始まって、指定した数の直前まで」の連続した数字を作り出します。

# 0から4までの数字を順番に出力する
for i in range(5):
    print(i)

これを実行すると、画面にはこう表示されます。

0
1
2
3
4

ここで一番大事なポイント! range(5)と指定した場合、5は含まれないことに注意してください。「0, 1, 2, 3, 4」の5つの数字が生成されます。プログラミングではこのように、最後の数が含まれないことが多いので、ぜひ覚えておきましょう。

パターン2: range(start, stop) - 始まりと終わりを指定する

次に、数字を二つ指定するパターンです。これは「最初の数から始まって、次の数の直前まで」の数字を作り出します。

# 3から7までの数字を順番に出力する
for i in range(3, 8):
    print(i)

実行結果はこちら。

3
4
5
6
7

range(3, 8)なので、3から始まり、8の手前である7で終わっていますね。直感的で分かりやすいのではないでしょうか?

パターン3: range(start, stop, step) - 飛ばす数を指定する

最後は、三つの数字を指定する応用パターンです。3番目の数字は「いくつずつ飛ばすか(ステップ)」を指定します。

例えば、1から10までの奇数だけを取り出したい、なんて時に大活躍します!

# 1から10までで、2つ飛ばし(奇数のみ)で出力
for i in range(1, 11, 2):
    print(i)

実行結果は、見事に奇数だけになりました。

1
3
5
7
9

このstepにはマイナスの値を指定することも可能です。これを使えば、カウントダウンも簡単に実装できますよ!

# 5から1までカウントダウン
for i in range(5, 0, -1):
    print(i)

実行結果:

5
4
3
2
1

range()の隠れたすごい能力

range()関数には、初心者が見落としがちな、しかし非常に重要な特徴があります。それは「メモリ効率がものすごく良い」ということです。

先ほどの「整理券の発行機」の例えを思い出してください。

例えば、range(1000000)と、百万という巨大な範囲を指定したとします。この時、Pythonはメモリ上に百万個の数字をすべて用意しておくわけではありません。

そうではなく、「最初は0、次は1、その次は2…」というルールだけを覚えておいて、forループに「次の番号をください」と言われるたびに、その都度「はい、次の〇番ですよ」と数字を一つだけ生成して渡しているのです。

この賢い仕組みのおかげで、どれだけ大きな範囲を指定しても、コンピュータのメモリを圧迫することがないのですね。

まとめ:繰り返し処理の達人を目指して

range()関数は、Pythonにおける繰り返し処理の土台となる、非常に強力なツールです。

  • range(stop): 0からstopの直前まで
  • range(start, stop): startからstopの直前まで
  • range(start, stop, step): startからstopの直前までstep飛ばしで

この3つのパターンをしっかり押さえておけば、あなたが実装したいほとんどの繰り返し処理は実現できるはずです。

今後のステップとしては、リストの要素とインデックス(何番目かという情報)を同時に取り出せるenumerate()関数や、range()を使ってリストをスマートに作成する「リスト内包表記」などを学んでみると、さらにコードの表現力が豊かになりますよ。

まずは、身の回りの単純な繰り返し作業をrange()を使って自動化できないか、ぜひ考えてみてください!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。