Pythonを学び始めたばかりの方が、最初につまずきやすく、かつ最も頻繁に使う機能の一つが「リスト」です。
複数のデータをまとめて管理したいとき、一つひとつのデータに別々の変数名を付けるのはとても大変です。例えば、買い物リストに「りんご、パン、牛乳」を入れたいとき、`item1 = "りんご"`, `item2 = "パン"`……と作るのは効率的ではありませんよね。
そんなときに便利なのがリストです。リストを使えば、関連するデータを一つのグループとしてまとめて保存でき、後から自由に追加したり、必要なデータだけを取り出したりすることができます。
この記事では、Pythonのリストの基本概念から、要素の追加、そして取り出し方まで、初心者の方にもわかりやすく丁寧に解説します。
Pythonのリストとは?
リストとは、複数のデータを順番に格納することができるデータ型のことです。プログラミングの世界では一般的に「配列」と呼ばれる機能に近いものですが、Pythonのリストは非常に柔軟な特徴を持っています。
リストのイメージは「ロッカー」
変数が一つのデータしか入れられない「小さな箱」だとしたら、リストは複数のデータを入れることができる「大きなロッカー」のようなものです。ロッカーの中には、それぞれのデータが入った棚があり、それぞれの棚には番号が割り振られています。
リストの大きな特徴
Pythonのリストには、他の言語の配列にはない便利な特徴があります。
- 異なる型のデータを混ぜて格納できる
数値だけ、文字列だけではなく、「文字列、数値、さらには別のリスト」といった異なるデータ型を一つのリストに混在させて入れることができます。
- 中身を自由に変更できる
一度作ったリストに対して、後から要素を増やしたり、中身を書き換えたり、不要なものを削除したりすることが可能です。
リストの作り方
リストを作成するには、角括弧 `[ ]` を使い、その中にカンマ `,` 区切りで値を記述します。
例: `animals = ["ネコ", "イヌ", "ウサギ"]`
このように記述することで、3つの動物名が入ったリストが作成されます。
リストから要素を取り出す方法(アクセス)
リストに格納したデータを取り出すには、「インデックス」という番号を指定します。インデックスとは、リストの中のどの位置にデータがあるかを示す「住所」のようなものです。
インデックスの基本ルール
ここが初心者が最も間違えやすいポイントですが、Pythonのインデックスは「0」から始まります。
- 1番目の要素を取り出したいとき $\rightarrow$ `[0]`
- 2番目の要素を取り出したいとき $\rightarrow$ `[1]`
- 3番目の要素を取り出したいとき $\rightarrow$ `[2]`
例えば、先ほどの `animals = ["ネコ", "イヌ", "ウサギ"]` というリストがある場合、`animals[0]` と指定すると「ネコ」が取り出せます。
後ろから指定する方法(負のインデックス)
Pythonでは、リストの末尾から数えて指定することもできます。この場合は `-1` から始まります。
- 最後から1番目の要素 $\rightarrow$ `[-1]`
- 最後から2番目の要素 $\rightarrow$ `[-2]`
例えば、`animals[-1]` と指定すれば、一番後ろにある「ウサギ」を簡単に取り出すことができます。大量のデータが入っているリストで、「とにかく最後の方のデータが見たい」というときに非常に便利です。
範囲を指定して取り出す「スライシング」
特定の要素一つではなく、「○番目から△番目まで」という範囲でまとめて取り出したいときは「スライシング」という機能を使います。
開始位置と終了位置をコロン `:` で区切って指定します。このとき、終了位置に指定したインデックスの直前までが取り出される点に注意してください。
リストに要素を追加する方法
リストの最大の利点は、プログラムの実行中にデータを増やせることです。追加したい場所や方法によって、使うメソッド(機能)を使い分ける必要があります。
1. 末尾に追加する `append()`
最もよく使われるのが `append()` メソッドです。これは、リストの一番最後(末尾)に新しい要素を一つ追加します。
使い方はシンプルに `リスト名.append(追加したい値)` と記述します。
注意点: `append()` でリストを引数に指定した場合、そのリスト自体が「一つの要素」として末尾に追加されます。リストの中身が展開されて結合されるわけではないため、注意が必要です。
2. 任意の位置に挿入する `insert()`
「末尾ではなく、先頭や途中にデータをいれたい」というときは `insert()` メソッドを使います。
使い方は `リスト名.insert(挿入したい位置のインデックス, 追加したい値)` です。 例えば、`insert(0, "値")` とすれば、リストの先頭に要素を追加できます。
パフォーマンスに関する視点: `insert()` を使って先頭や途中に要素を追加する場合、それ以降にあるすべての要素を一つずつ後ろにずらす処理が発生します。そのため、非常に大規模なリストを扱う場合、`append()` に比べて処理に時間がかかる(コストが高い)という傾向があります。
3. 別のリストを結合する `extend()`
一つの要素ではなく、別のリストに入っている複数の要素をまとめて追加したい場合は `extend()` メソッドを使います。
`append()` との違いは、`extend()` は相手がリストであれば、その中身をバラバラにして元のリストの末尾に繋げてくれる点です。
また、`+` 演算子(例:`list1 + list2`)を使っても同様にリスト同士を結合することが可能です。
文字列を扱う際の注意: `extend()` に文字列を渡すと、文字列が「一文字ずつの要素」として分解されて追加されてしまいます。文字列を一つの塊として追加したい場合は `append()` を使いましょう。
4. スライスを使った高度な挿入と置換
スライス機能を使うと、指定した範囲に別のリストを代入することで、まとめて要素を追加したり、既存の範囲を丸ごと置き換えたり(置換)することができます。
リスト操作の使い分けまとめ
状況に応じて、どのメソッドを使うべきか判断基準をまとめました。
| やりたいこと | 使う方法 | 特徴 |
|---|---|---|
| とりあえず最後に一つ追加したい | `append()` | 最も簡単で高速 |
| 特定の位置(先頭など)に入れたい | `insert()` | 位置を指定できるが、大量データ時は低速 |
| 別のリストを合体させたい | `extend()` または `+` | 中身を展開して結合する |
| 範囲を指定して入れ替えたい | スライス代入 | 柔軟に範囲を置換できる |
さらにステップアップするために
リストは非常に便利ですが、Pythonには他にもデータをまとめる「コレクション」と呼ばれる型があります。用途に合わせて使い分けることで、より効率的なプログラムが書けます。
- タプル (tuple): リストに似ていますが、一度作ると中身を変更できない(追加・削除ができない)型です。設定値など、変えてはいけないデータを扱うのに適しています。
- セット (set): 重複する値を許さない型です。「何種類あるか」を数えたり、重複を排除したりしたいときに便利です。
- 辞書 (dict): 番号(インデックス)ではなく、「キー」という名前で値を管理する型です。
また、もし非常に大量の数値を扱い、高速な計算を行いたい場合は、標準のリストではなく `array` モジュールや、外部ライブラリの `NumPy`(numpy.ndarray)を検討してください。Pythonのリストは異なる型を混ぜて持てる柔軟さがある分、数値計算に特化した配列に比べると動作が遅くなる場合があります。
まとめ
Pythonのリストは、複数のデータをまとめて管理するための「万能ロッカー」のような存在です。
- 取り出しはインデックス(0から始まる番号)を使う。
- 末尾への追加は `append()`。
- 指定位置への挿入は `insert()`。
- リスト同士の結合は `extend()`。
まずはこの基本をマスターし、実際にコードを書いて動かしてみてください。データの追加と取り出しができるようになれば、ループ処理(for文)などと組み合わせて、より複雑で便利なプログラムを作成できるようになります。
ピックアップ記事



