AI資格ドリル
資格を選ぶ↓

用語比較

rangeとlistの違い|リストに見えて実はリストではない(Python3基礎)

rangeとlistは、for文や要素の取り出しでは同じように使えるので、同じものだと思いやすい組です。print(range(10)) が [0, 1, ..., 9] ではなく range(0, 10) と表示されて、戸惑う人もいます。

rangeは数列を生む等差数列のオブジェクトで、リストではない。中身を並べて見たいときや、要素を変えたいときは、list() でリストにすると覚えると、選択肢を切り分けられます。

このページは、Python公式チュートリアル4.3「range() 関数」の記述と、Python 3.9.6での実行結果をもとに比べます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

range

等差数列を生成するオブジェクト。いろいろな点でリストのように振る舞うが、本当はリストではない。イテレートすると、数列の連続した要素を返す。

list

要素を実際に持つリスト。append()や要素の代入で中身を変えられる。

見分け方

表示が range(0, 10) の形ならrange、[0, 1, 2] の形ならlist。中身を並べて確かめるときは list(range(...)) にする。

違いを表で確認

比較軸rangelist
print の表示range:print(range(10)) は range(0, 10) と表示されるlist:print(list(range(10))) は [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] と表示される
型range:isinstance(range(10), list) はFalse。型の名前は rangelist:型の名前は list
要素の変更range:append() などがない(AttributeError)。作ったあとに中身を変える操作は使えないlist:append() や要素の代入で変更できる
要素の持ち方range:実際にリストを作らないので、公式チュートリアルは、スペースの節約になると述べるlist:要素をすべて実際に持つ

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

print(range(5)) の表示が [0, 1, 2, 3, 4] にならず戸惑う人

rangeはリストではないので、range(0, 5) と表示されます。中身を見たいときは list(range(5)) にします。

02

数列に append() や要素の代入をしたい人

rangeにはappend()がありません。list() でリストにしてから変更します。

03

for文で決まった回数だけ繰り返したい人

rangeのままで足ります。リストにする必要はありません。

具体例で使い分ける

例 1

print でそのまま表示する場合

print(range(10)) と print(list(range(10))) の表示を比べます。

  • 公式チュートリアルは、rangeを直接出力すると変なことになると述べ、range(10) の表示は range(0, 10) だと示します。
  • list(range(10)) にすると、[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] と表示されます。

結論: 並べて見たいときは list() で包みます。

例 2

開始・終端・ステップを指定する場合

list(range(5, 10))、list(range(0, 10, 3))、list(range(-10, -100, -30)) の結果を調べます。

  • 公式チュートリアルの例どおり、順に [5, 6, 7, 8, 9]、[0, 3, 6, 9]、[-10, -40, -70] です。
  • 終端値は、生成される数列には入りません。range(10) は10個の値を生成します。

結論: ステップは負の数にもできます。終端は含まれません。

例 3

listと比べたり、変更したりする場合

range(3) == [0, 1, 2] の結果と、range(3).append(3) の結果を調べます。

  • Python 3.9.6で range(3) == [0, 1, 2] はFalseです。list(range(3)) == [0, 1, 2] はTrueです。
  • range(3).append(3) は、AttributeError: 'range' object has no attribute 'append' になります。
  • rangeの添字や、スライスは使えます。range(10)[3] は3、range(10)[2:5] は range(2, 5) です。

結論: rangeはリストと等しくなく、中身を変える操作も使えません。

問題文から答えを選ぶ手順

  1. 1

    表示の形を見る

    range(0, 10) の形ならrange、角括弧の形ならlistです。

  2. 2

    変更するかを見る

    append() や要素の代入が要るなら、list() でリストにします。

  3. 3

    目的を見る

    for文の繰り返しや sum() の引数なら、rangeのままで足ります。

試験での見分け方

  • 1rangeはリストのように振る舞うが、リストではない。
  • 2rangeは、要素が尽きるまで順に取得できるイテラブルである。for文や sum() の引数に使える。
  • 3終端値は数列に入らない。range(10) は10個の値を生成する。
  • 4中身を並べたり変更したりするときは、list() でリストにする。

誤答しやすい選択肢

range(5) が [0, 1, 2, 3, 4] というリストだと考える

修正: range(5) はrangeオブジェクトです。リストにするには list(range(5)) と書きます。

range(1, 10) に10が含まれると考える

修正: 終端値は含まれません。range(1, 10) は1から9までです。

range(3) == [0, 1, 2] がTrueになると考える

修正: 型が違うのでFalseです。比べるなら list(range(3)) == [0, 1, 2] にします。

確認問題

Q1print(range(10)) は何と表示されますか?

答え: range(0, 10)

公式チュートリアルは、rangeを直接出力するとこの形になると示します。

Q2list(range(0, 10, 3)) の結果は?

答え: [0, 3, 6, 9]

0から3ずつ増え、終端の10は含まれません。

Q3range(3) に append(3) を呼ぶとどうなりますか?

答え: AttributeError になる

rangeはリストではなく、append() を持ちません。

到達チェック

  • rangeはリストではなくイテラブルだと言える
  • range(10) の表示が range(0, 10) だと言える
  • 終端値が数列に入らないと言える

同じ資格で次に知りたいこと

よくある質問

Qrangeとlistの違いは?

A

rangeは等差数列を生成するオブジェクトで、リストのように振る舞いますが、本当はリストではありません。listは要素を実際に持ち、append() などで変更できます。

Qprint(range(10)) で数字が並ばないのはなぜですか?

A

rangeはリストではないので、range(0, 10) の形で表示されます。数字を並べて見るには list(range(10)) にします。

Qrange(1, 10) に10は含まれますか?

A

含まれません。公式チュートリアルは、指定した終端値は生成される数列には入らないと述べます。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)