note.nkmk.me

Pythonでリスト(配列)の要素を削除するclear, pop, remove, del

Date: 2018-01-29 / tags: Python, リスト

Pythonでlist型のリスト(配列)の要素を削除するには、リストのメソッドclaer(), pop(), remove()を使う。そのほか、インデックスやスライスで位置・範囲を指定してdel文で削除する方法もある。

  • すべての要素を削除: clear()
  • 指定した位置の要素を削除し、値を取得: pop()
  • 指定した値と同じ要素を検索し、最初の要素を削除: remove()
  • インデックス・スライスで位置・範囲を指定して削除: del

リストから特定の条件を満たす要素のみ抽出(=条件を満たさない複数の要素を削除)して新たなリストを生成することもできる。以下の記事を参照。

なお、リストは異なる型のデータを格納可能で、厳密には配列とは異なる。メモリサイズやメモリアドレスを必要とするような処理や大規模なデータの数値計算処理などで配列を扱いたい場合はarray(標準ライブラリ)やNumPyを使う。

スポンサーリンク

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

リストのメソッドclear()で、すべての要素が削除され、空のリストになる。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

指定した位置の要素を削除し、値を取得: pop()

リストのメソッドpop()で、指定した位置の要素を削除し、その要素の値を取得できる。

先頭(最初)は0

print(l.pop(0))
# 0

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

print(l.pop(3))
# 4

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

負の値を使って末尾(最後)からの位置を指定することもできる。末尾(最後)は-1

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

引数を省略して位置を指定しない場合は、末尾(最後)の要素を削除する。

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

存在しない位置を指定するとエラーになる。

IndexError: pop index out of range

指定した値と同じ要素を検索し、最初の要素を削除: remove()

リストのメソッドremove()で、指定した値と同じ要素を検索し、最初の要素を削除できる。

l = list('abcdefg')
print(l)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g']

l.remove('d')
print(l)
# ['a', 'b', 'c', 'e', 'f', 'g']

指定した値に一致する要素がリストに複数含まれる場合は、最初の一つだけが削除される。

l = [0, 1, 2, 1, 3]
l.remove(1)
print(l)
# [0, 2, 1, 3]

存在しない値を指定するとエラーになる。

ValueError: list.remove(x): x not in list

条件を満たす複数の要素を一括で削除したい場合は以下の記事を参照。

インデックス・スライスで位置・範囲を指定して削除: del

これまでのclear(), pop(), remove()はリストのメソッドだが、del文でリストの要素を削除することもできる。

削除したい要素をインデックスで指定する。先頭(最初)は0で、末尾(最後)は-1

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

スライスで範囲を指定すると、複数の要素を一括で削除できる。

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]

全範囲を指定してすべての要素を削除することも可能。

l = list(range(10))
del l[:]
print(l)
# []

スライスでの範囲指定を[start:stop:step]として増分stepを指定すると、飛び飛びの複数の要素を一括で削除できる。

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

スライスについての詳細は以下の記事を参照。

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事