Pythonでは、文字列と同じようにリストもよく使う基本的なデータ構造です。
特に特徴的なのが、「スライス」と呼ばれる書き方です。
これはデータの一部だけを取り出すときに使うもので、最初は少し戸惑いやすい部分でもあります。
この記事では、リストのスライスから始めて、
- 値の取り出し方
- 要素の追加や削除
- コピーの扱い
といった基本操作を、順番に確認していきます。
Pythonの導入についてはこちら。
Python入門:最初のプログラムを作って実行する方法 – Lean Data Office
Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office
スライスの基本
まずはリストを用意します。
my_list = [1, 2, 3, 4, 5]

print(my_list[2:])

ここではインデックス2から最後までを取り出しています。
スライスは
[start:end]
という形になっていて、開始位置から終了位置の手前までを取得します。
ステップを指定する
スライスでは、もう一つ指定できる値があります。
それが「ステップ」です。
print(my_list[0:5:2])

これは「2つずつ飛ばして取り出す」という意味になります。
※「0から5未満まで、2つ飛ばしで取る」という意味
同じように、値を変えると結果も変わります。
print(my_list[::3])

ここでは開始と終了を省略していますが、この場合は
「最初から最後まで」が省略された形で扱われます。
逆順に取り出す
ステップにマイナスを指定すると、逆方向に進みます。
print(my_list[::-1])

このようにすることで、リストを簡単に逆順にすることもできます。
補足:rangeをつかったリストの作成
こうした操作を試すとき、毎回手でリストを書くのは少し面倒です。
その場合は range を使うと便利です。
my_list = list(range(10))
print(my_list)

rangeは連番を生成するオブジェクトで、それをlist()でリストに変換しています。
このリストを使うと、スライスの動きも分かりやすくなります。
print(my_list[::2])

リストの要素を追加する
次に、リストを変更する操作を見ていきます。
まずは要素の追加です。
my_list = [1, 2, 3, 4]
my_list.append(5)
print(my_list)

appendはリストの末尾に値を追加します。
任意の位置に挿入する
位置を指定して追加したい場合は insert を使います。
my_list.insert(2, 99)
print(my_list)

第1引数が位置、第2引数が値です。
リストから要素を削除する
要素を削除する方法はいくつかあります。
まずは remove です。
my_list.remove(99)
print(my_list)

removeは値を指定して削除します。
ただし、この値が存在しない場合はエラーになります。
取り出しながら削除する:pop
もう一つの方法が pop です。
value = my_list.pop()
print(value)
print(my_list)

popは末尾の値を削除しつつ、その値を返します。
この特徴を使うと、ループで全て取り出すこともできます。
while len(my_list) > 0:
print(my_list.pop())

こうすると、後ろから順番に値が取り出されていきます。
リストの注意点
最後に少しだけ重要なポイントです。
a = [1, 2, 3]
b = a
a.append(4)
print(b)

一見すると、aだけが変更されるように見えますが、bも変わってしまいます。
これは、同じリストを参照しているためです。
もし独立したコピーを作りたい場合は、copy()を使います。
a = [1, 2, 3]
b = a.copy()
a.append(4)
print(a)
print(b)

この場合は、aとbは別々のリストとして扱われます。
リストはPythonの中でも特によく使うデータ構造です。
今回見てきたように、
- スライスで一部を取り出す
- appendやinsertで追加する
- removeやpopで削除する
- copyで独立したデータを作る
といった操作を組み合わせることで、柔軟にデータを扱うことができます。
最初は少し挙動が分かりにくい部分もありますが、実際に手を動かして試していくと、少しずつ自然に使えるようになってきます。