[ 最終更新日: 2026-06-24 21:59 閲覧回数: 8回 ]
range 関数の不思議
良くfor i in ragge(x,y) なんていう決まった形で覚えていたので、深く考えたことがなかった。今日は、このrange()関数の機能を深く掘り下げてみよう
そもそも for i in range() ってどういう構文か?
一つ覚えの構文だけど、分解すると次のようになるようだ。
| for i in | range(x,y) |
|---|---|
- for i => 変数 i を繰り返す
- i in => in() 関数でリストに含まれている要素を調べて、(仮)変数 I に代入
そこで range()は何をしているかというと、in() 関数の調査対象となるリストを作成している。これによってfor 文の繰り返す回数を限定する機能を果たしている。
range() 関数はどのようなものか?
range関数の構文
通常ここでは、どんなリストを作るかを、range 構文として説明される。
例えば、renge()の第一引数はリストのスタート、第二引数は引数未満までを最終にすること、第三引数として増減のステップ数を渡せることなどだ。
通常のリストと異なるrange関数で作られたリスト
list1 = [1,2,3,4,5]
list2 = range(1,6) # 1 〜 5 までのリスト
print(list2) # 作られたであろうはずのlist2を表示させると
None # 何もできておりません
print(range(1,6)) # それではrange(1,6)を表示させようとすると
range(1, 6) # print関数の引数として渡したものがそのまま表示されます
print(list(range(1,6))) # range()関数で作られたであろうリストを表示するにはリスト化が必要です
[0, 1, 2, 3, 4, 5] # リストができているようです
この後 print(lislt2) を実行しても None が帰ってきます。ここまで来るとリストができているようなてきてないような?
また、このまま同値性と同一性を比較してみます。
list1 == list2
False
print(id(list1),id(list2))
140253593309376 140253614162880
# 予測通り同一ではありませんが、予測に反して同値性も有していないのです。Noneの結果が反映していると思われます。
またメモリの使用量は格段にrange関数で作られたリストのほうが小さいです。
import sys
list1 = [0,1,2,3,4,5]
print(sys.getsizeof(list1))
104
print(sys.getsizeof(list2))
16
まとめ(らしきもの)
ここではこのような不思議な状態を解明できていないので、通常のリストとは異なるリストとだけ、結論にしておきます。