【Python】for文とrange関数
- for文とrange関数の基本
- range関数の基本構文
- 基本的な使用例
- step引数を使う
- 負のステップ値を使う
- len()と組み合わせる
- リバースループを作る
- rangeをリストに変換する
- enumerateと組み合わせる
- zipと組み合わせる
- 奇数・偶数を取り出す
- rangeのメモリ効率
- rangeの代替手段
for文とrange関数の基本
Pythonのfor文は、リストやタプルなどの反復可能なオブジェクトを順番に処理するための構文です。その中でも、range()
関数を使うことで、一定の数値の範囲を簡単にループ処理できます。
range関数の基本構文
range()
関数は、以下のように3つの異なる使い方ができます。
range(stop)
– 0からstop-1までの整数を生成range(start, stop)
– startからstop-1までの整数を生成range(start, stop, step)
– startからstop-1までstep刻みの整数を生成
基本的な使用例
# 0から4まで出力
for i in range(5):
print(i) # 0, 1, 2, 3, 4
step引数を使う
# 0から10まで2刻みで出力
for i in range(0, 11, 2):
print(i) # 0, 2, 4, 6, 8, 10
負のステップ値を使う
# 10から1まで逆順に出力
for i in range(10, 0, -1):
print(i) # 10, 9, 8, ..., 1
len()と組み合わせる
リストの要素にインデックスを付けながら処理する場合、len()
と組み合わせて使うことができます。
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(i, fruits[i])
リバースループを作る
reversed()
とrange()
を組み合わせると、簡潔に逆順ループを作れます。
for i in reversed(range(5)):
print(i) # 4, 3, 2, 1, 0
rangeをリストに変換する
numbers = list(range(5))
print(numbers) # [0, 1, 2, 3, 4]
enumerateと組み合わせる
リストをループ処理する際にenumerate()
と組み合わせると、インデックス付きの繰り返しが可能です。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)
zipと組み合わせる
複数のリストを同時にループ処理する場合、zip()
と組み合わせると便利です。
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(name, age)
奇数・偶数を取り出す
# 1から10までの奇数
for i in range(1, 11, 2):
print(i) # 1, 3, 5, 7, 9
# 0から10までの偶数
for i in range(0, 11, 2):
print(i) # 0, 2, 4, 6, 8, 10
rangeのメモリ効率
range()
はジェネレーターのように機能するため、リストのようにすべての要素をメモリに保持せず、ループのたびに値を生成するためメモリ効率が良いです。
# メモリ効率の確認
import sys
print(sys.getsizeof(range(1000000))) # メモリ使用量が非常に小さい
rangeの代替手段
rangeの代わりに、NumPyのarange()
やlinspace()
を使うこともできます。
import numpy as np
# arange() を使う
print(np.arange(0, 10, 2)) # [0 2 4 6 8]
# linspace() を使う
print(np.linspace(0, 10, 5)) # [ 0. 2.5 5. 7.5 10. ]