Pythonでリスト(配列)に要素を追加するappend, extend, insert

Modified: | Tags: Python, リスト

Pythonでlist型のリスト(配列)に要素を追加・挿入したり、別のリストを結合したりするには、append(), extend(), insert()メソッドや、+演算子、スライスを使う。

リストの要素の削除については以下の記事を参照。

なお、リストは異なる型のデータを格納可能で、厳密には配列とは異なる。配列を扱いたい場合はarray(標準ライブラリ)やNumPyを使う。

リストの末尾に要素を追加: append()

リストのappend()メソッドで、末尾(最後)に要素を追加できる。先頭など、末尾以外の位置に追加したい場合は後述のinsert()を使う。

l = [0, 1, 2]

l.append(100)
print(l)
# [0, 1, 2, 100]

l.append('abc')
print(l)
# [0, 1, 2, 100, 'abc']

リストもひとつの要素として追加される。結合はされない。

l.append([3, 4, 5])
print(l)
# [0, 1, 2, 100, 'abc', [3, 4, 5]]

リストとリストを結合(連結): extend(), +演算子

リストのextend()メソッドで、リストに別のリストやタプルを結合できる。すべての要素が元のリストの末尾に追加される。

l = [0, 1, 2]

l.extend([10, 11, 12])
print(l)
# [0, 1, 2, 10, 11, 12]

l.extend((100, 101, 102))
print(l)
# [0, 1, 2, 10, 11, 12, 100, 101, 102]

文字列は各文字(要素)が一文字ずつ追加されるので注意。

l.extend('abc')
print(l)
# [0, 1, 2, 10, 11, 12, 100, 101, 102, 'a', 'b', 'c']

extend()メソッドではなく+演算子や+=演算子で連結することも可能。+は新たなリストを返し、+=は既存のリストに追加する。

l_new = l + [3, 4, 5]
print(l_new)
# [0, 1, 2, 10, 11, 12, 100, 101, 102, 'a', 'b', 'c', 3, 4, 5]

l += [3, 4, 5]
print(l)
# [0, 1, 2, 10, 11, 12, 100, 101, 102, 'a', 'b', 'c', 3, 4, 5]

リストの指定位置に要素を追加(挿入): insert()

リストのinsert()メソッドで、指定した位置に要素を追加(挿入)できる。

第一引数に位置、第二引数に挿入する要素を指定する。先頭(最初)は0。負の値の場合、-1が末尾(最後)の一つ前となる。

l = ['a', 'b', 'c']

l.insert(1, 100)
print(l)
# ['a', 100, 'b', 'c']

l.insert(0, 200)
print(l)
# [200, 'a', 100, 'b', 'c']

l.insert(-1, 300)
print(l)
# [200, 'a', 100, 'b', 300, 'c']

l.insert(-2, 400)
print(l)
# [200, 'a', 100, 'b', 400, 300, 'c']

append()と同じく、リストもひとつの要素として追加される。結合はされない。

l.insert(0, [-1, -2, -3])
print(l)
# [[-1, -2, -3], 200, 'a', 100, 'b', 400, 300, 'c']

なお、insert()O(n)のコストを必要とし、効率的な操作ではない。リストの各種操作に対する計算量は公式のWikiの以下のページを参照。

先頭への要素の追加をO(1)で行う型として標準ライブラリcollectionsモジュールにdeque型が用意されている。例えばデータをキュー(queue, FIFO)として扱いたい場合はdequeを使うほうが効率的。

リストの指定位置に別のリストを追加(挿入): スライス

スライスで範囲を指定して別のリストやタプルを代入することで、すべての要素を追加(挿入)できる。

l = ['a', 'b', 'c']

l[1:1] = [100, 200, 300]
print(l)
# ['a', 100, 200, 300, 'b', 'c']

元の要素を置換することもできる。指定した範囲の要素がすべて置き換えられる。

l = ['a', 'b', 'c']

l[1:2] = [100, 200, 300]
print(l)
# ['a', 100, 200, 300, 'c']

スライスによる範囲指定などの詳細は以下の記事を参照。

関連カテゴリー

関連記事