Pythonリストの基本操作を理解する:スライスと変更の仕組み

python logo notext.svg

Pythonでは、文字列と同じようにリストもよく使う基本的なデータ構造です。

特に特徴的なのが、「スライス」と呼ばれる書き方です。
これはデータの一部だけを取り出すときに使うもので、最初は少し戸惑いやすい部分でもあります。

この記事では、リストのスライスから始めて、

  • 値の取り出し方
  • 要素の追加や削除
  • コピーの扱い

といった基本操作を、順番に確認していきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

スライスの基本

まずはリストを用意します。

my_list = [1, 2, 3, 4, 5]
image
print(my_list[2:])
image

ここではインデックス2から最後までを取り出しています。

スライスは

[start:end]

という形になっていて、開始位置から終了位置の手前までを取得します。

ステップを指定する

スライスでは、もう一つ指定できる値があります。
それが「ステップ」です。

print(my_list[0:5:2])
image

これは「2つずつ飛ばして取り出す」という意味になります。

※「0から5未満まで、2つ飛ばしで取る」という意味

同じように、値を変えると結果も変わります。

print(my_list[::3])
image

ここでは開始と終了を省略していますが、この場合は

「最初から最後まで」が省略された形で扱われます。

逆順に取り出す

ステップにマイナスを指定すると、逆方向に進みます。

print(my_list[::-1])
image

このようにすることで、リストを簡単に逆順にすることもできます。

補足:rangeをつかったリストの作成

こうした操作を試すとき、毎回手でリストを書くのは少し面倒です。

その場合は range を使うと便利です。

my_list = list(range(10))
print(my_list)
image

rangeは連番を生成するオブジェクトで、それをlist()でリストに変換しています。

このリストを使うと、スライスの動きも分かりやすくなります。

print(my_list[::2])
image

リストの要素を追加する

次に、リストを変更する操作を見ていきます。

まずは要素の追加です。

my_list = [1, 2, 3, 4]
my_list.append(5)
print(my_list)
image

appendはリストの末尾に値を追加します。

任意の位置に挿入する

位置を指定して追加したい場合は insert を使います。

my_list.insert(2, 99)
print(my_list)
image

第1引数が位置、第2引数が値です。

リストから要素を削除する

要素を削除する方法はいくつかあります。

まずは remove です。

my_list.remove(99)
print(my_list)
image

removeは値を指定して削除します。

ただし、この値が存在しない場合はエラーになります。

取り出しながら削除する:pop

もう一つの方法が pop です。

value = my_list.pop()
print(value)
print(my_list)
image

popは末尾の値を削除しつつ、その値を返します。

この特徴を使うと、ループで全て取り出すこともできます。

while len(my_list) > 0:
  print(my_list.pop())
image

こうすると、後ろから順番に値が取り出されていきます。

リストの注意点

最後に少しだけ重要なポイントです。

a = [1, 2, 3]
b = a
a.append(4)
print(b)
image

一見すると、aだけが変更されるように見えますが、bも変わってしまいます。

これは、同じリストを参照しているためです。

もし独立したコピーを作りたい場合は、copy()を使います。

a = [1, 2, 3]
b = a.copy()
a.append(4)
print(a)
print(b)
image

この場合は、abは別々のリストとして扱われます。

リストはPythonの中でも特によく使うデータ構造です。

今回見てきたように、

  • スライスで一部を取り出す
  • appendやinsertで追加する
  • removeやpopで削除する
  • copyで独立したデータを作る

といった操作を組み合わせることで、柔軟にデータを扱うことができます。

最初は少し挙動が分かりにくい部分もありますが、実際に手を動かして試していくと、少しずつ自然に使えるようになってきます。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。