Pythonで配列(リスト)に要素を追加・削除する方法

Pythonのリストで要素を追加・削除する方法をよく使うパターンで簡潔にまとめました。

Pythonで配列(リスト)に要素を追加・削除する方法

リスト(配列)に要素を追加する

Pythonのリスト(配列)に要素を追加・拡張・連結するには、list型のメソッドappend()extend()insert()や、+演算子を使います。以下、具体例とともに解説します。

末尾に追加する(append)

リストの末尾に要素を追加するには、append()メソッドを使います。

items = [1, 2, 3]

# リストの末尾に要素を追加
items.append(4)

print(items)
# [1, 2, 3, 4]

指定の位置に要素を追加する(insert)

リストの指定した位置に要素を挿入するには、insert()メソッドを使います。次の例では、リストの2番目の位置(インデックス1)に要素を挿入しています。

items = [1, 2, 3]

# 第一引数で挿入位置を指定、第二引数で挿入する要素を指定
items.insert(1, 4)

print(items)
# [1, 4, 2, 3]

この方法で、インデックスの指定を0にすれば、リストの先頭に要素を追加することができます。

リストに複数の要素を追加する(extendでリストの拡張)

複数の要素をまとめてリストに追加するには、extend()メソッドを使います。また、+=演算子を使って、リストを拡張することもできます。

items = [1, 2, 3]

# extendでリストを拡張
items.extend([4, 5, 6])

print(items)
# [1, 2, 3, 4, 5, 6]

# +=でリストを拡張
items += [7, 8, 9]

print(items)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

注意が必要なのは、append()extend()の違いです。

extend()は上記の例のように、リストを指定すると要素を分解してそれぞれを別のリストの要素として追加してくれます。

一方、append()は指定の要素を末尾に追加する操作なので、リストを追加すると、そのリスト自体が別のリストの要素として追加されることになります。

items = [1, 2, 3]

# appendを使うと、指定したリストが丸ごと一つの要素になる
items.append([4, 5, 6])

print(items)
# [1, 2, 3, [4, 5, 6]]

リストとリストを結合(連結)する

extend()を利用した拡張と似た操作ですが、特定のリストの要素を増やすのではなく、二つ以上のリストを結合して新しいリストを作る操作です。

items1 = [1, 2, 3]
items2 = [4, 5, 6]

new_items = items1 + items2

print(new_items)
# [1, 2, 3, 4, 5, 6]

リストのスライスに要素を代入する

リストのスライスに要素を代入することで、リストの一部を指定した位置から要素を挿入することもできます。この場合、元のリストから指定した範囲の要素が削除され、新しい要素が挿入されます。

items = [1, 2, 3, 4, 5]

# リストの2番目から3番目の位置に要素を挿入
# もともとの[2, 3]の要素は置き換えられる
items[1:3] = [6, 7, 8]

print(items)
# [1, 6, 7, 8, 4, 5]

リスト(配列)から要素を削除する

Pythonのリスト(配列)から要素を削除するには、list型のメソッドpop()remove()clear()などを使います。また、delステートメントやリスト内包表記による削除の方法もあります。以下、具体例とともに解説します。

末尾から削除する(pop)

リストから最後の要素を削除するには、pop()メソッドを使います。pop()メソッドは、削除した要素を返すので、削除した要素を後で使用する場合に便利です。

items = [1, 2, 3, 4, 5]

last_item = items.pop()

print(items)
# [1, 2, 3, 4]

print(last_item)
# 5

指定の位置から要素を削除する(pop)

リストから指定した位置の要素を削除する場合も、pop()メソッドを使います。pop()の引数にインデックス位置を指定すると、その位置の要素を削除します。

items = [1, 2, 3, 4, 5]

# リストの2番目の位置(インデックス1)の要素を削除
deleted_item = items.pop(1)

print(items)
# [1, 3, 4, 5]

print(deleted_item)
# 2

指定した範囲の要素を削除する(del)

Pythonでは、delステートメントを使って、リストから要素を削除することもできます。delステートメントは、変数や要素を削除するためのもので、del リスト名[開始インデックス:終了インデックス]という形でリストにも利用できます。インデックスの範囲を指定しない場合には変数自体を削除してしまうことに気をつけてください。

items = [1, 2, 3, 4, 5]

# リストの2番目の位置(インデックス1)の要素を削除
del items[1]

print(items)
# [1, 3, 4, 5]

# リストの2番目から3番目の位置(インデックス1から2)の要素を削除
del items[1:3]

print(items)
# [1, 5]

# 全範囲を指定してすべての要素を削除
del items[:]

print(items)
# []

また、delを使わなくても、リストのスライスに空のリストを代入することで、指定した範囲の要素を削除することもできます。

items = [1, 2, 3, 4, 5]

# リストの2番目から3番目の位置に空のリストを挿入
# もともとの[2, 3]の要素は削除される
items[1:3] = []

print(items)
# [1, 4, 5]

特定の値を持つ要素を削除する(remove)

リストから特定の値を持つ要素を削除するには、remove()メソッドを使います。remove()は、リストの中から最初に見つけた指定の値を削除します。

items = [1, 2, 3, 1, 2, 3]

# リストから最初に出てきた値が3の要素を削除
items.remove(3)

print(items)
# [1, 2, 1, 2, 3]

# リスト内に存在しない値を指定するとValueErrorになる
items.remove(10)
# ValueError: list.remove(x): x not in list

特定の値を持つ要素をすべて削除する(リスト内包表記)

remove()では、指定した値をリストから検索して最初の要素だけを削除します。リストに含まれるすべての要素から、指定した値を削除したい場合には、リスト内包表記を利用します。

リスト内包表記は、[格納する要素 for 要素 in リスト if 条件]という形で新しいリストを作成します。条件部分に、削除する要素の条件を指定することで、リストから指定の要素をすべて削除することができます。

以下の例では、値が2である要素を削除して新しいリストを生成しています。

items = [1, 2, 3, 4, 5, 2, 3, 4]

# 値が2である要素を削除した新しいリストを生成
filtered_items = [item for item in items if item != 2]

print(filtered_items)
# [1, 3, 4, 5, 3, 4]

# 元のリストを置き換えることも可能
items = [1, 2, 3, 4, 5, 2, 3, 4]
items = [item for item in items if item !=2]
print(items)
# [1, 3, 4, 5, 3, 4]

重複する要素を削除する(set)

Pythonのset オブジェクトは、重複する要素を持たない、順序を持たない集合を表すことができます。リストから重複する要素を削除するには、まず set オブジェクトを作成してから、それをリストに戻すことで実現できます。

以下の例は、リスト [1, 2, 3, 1, 2, 3] から重複する要素を削除しています。

items = [1, 2, 3, 1, 2, 3]

# setオブジェクトを作成
items_set = set(items)

# setオブジェクトをリストに戻す
items = list(items_set)

print(items)
# [1, 2, 3]

すべての要素を削除する(clear)

リストからすべての要素を削除して空のリストを作るには、clear()メソッドを使います。

items = [1, 2, 3, 4, 5]

items.clear()

print(items)
# []