Pythonのappend()でリストに要素を追加する

Pythonのappendメソッドはリストの末尾に指定の要素を追加するメソッドです。ここではその使い方と注意点、よく聞かれることを全てまとめています。

目次

1. Pythonのappendメソッドの使い方

Pythonのappendメソッドは次のように書きます。

In [ ]:
''' appendメソッドの書き方 '''
リスト.append(追加したい要素)

これを使うと、元のリストに任意の要素を追加することができます。要素を追加した新しいリストを作るのではなく、元のリストに要素が追加されるという点を覚えておきましょう。

例を見た方が早いので、早速見ていきましょう。

なお、appendメソッドはリストメソッドです。dict(辞書)やnumpyのarray配列、string(文字列)やtuple(タプル)、set(集合)には使えません。これらに、任意の要素を追加するには別のメソッドを使います。これについても後ほど解説します。

2. Pythonのappendでlist(リスト)に追加する

それでは次のコードをご覧ください。list1を作り、そこにappendメソッドで要素を追加していっています。

In [1]:
''' appendメソッドは元のリストに変更を加えます。 '''
list1 = [2, 3, 4, 5]

#  要素を追加してみましょう。
list1.append(6)
print(list1)   #  元のリストに要素が追加されます。

#  続けて要素を追加します。
list1.append(7)
print(list1)  #  元のリストに要素が追加されます。

#  要素は後ろに追加します。
list1.append(1)
print(list1)  #  元のリストに要素が追加されます。
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6, 7, 1]

このようにPythonのappendメソッドは、元のリストの末尾に指定の要素を追加してくれます。

ここでappendメソッドは新しいリストを作っているのではなく、元のリストに要素を加えていっている点にご注目ください。ちょうど下図のようになっています。

この点を忘れているとコードを書いている時に混乱してしまいますので注意しましょう。もちろん、appendメソッドは文字列のリストにも使うことができます。以下で確認しておきましょう。

In [2]:
''' 文字列リストでも同じです。 '''
list2 = ['あ', 'い', 'う', 'え', 'お']

list2.append('か')
print(list2)
list2.append('き')
print(list2)
list2.append('く')
print(list2)
['あ', 'い', 'う', 'え', 'お', 'か']
['あ', 'い', 'う', 'え', 'お', 'か', 'き']
['あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く']

2.1. Pythonのappendは複数の要素を同時に追加できない

なお、Pythonのappendでは複数の要素を一度に追加することはできません。次のコードでは、list1に5と6を同時に追加しようとしていますが、エラーになっています。

In [3]:
''' appendメソッドの引数に同時に複数の要素を渡すことはできません。 '''
list1.append(5, 6)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-19-b81b7df0c6f9> in <module>
      1 ''' appendメソッドの引数に同時に複数の要素を渡すことはできません。 '''
----> 2 list1.append(5, 6)

TypeError: append() takes exactly one argument (2 given)

appendメソッドで要素を追加する際は、一つずつ行いましょう。

2.2. Pythonのappendとextendの違い

ここで混乱する方が多いPythonのappendとextendの違いに触れておきます。appendメソッドの引数には別のリストを渡すこともできます。しかしappendの引数にリストを渡すと、それは元のリストにネスティングされて渡されます。extendメソッドでは、引数に渡したリストの要素がそのまま元のリストの末尾に追加されます。

実際に確かめてみた方が早いですね。次のコードを見てみてください。

In [4]:
''' appendメソッドでは別のリストを追加することもできます。 '''
list1.append(list2)
print(list1)

''' もし要素のみを追加したい場合はextendメソッドを使います。 '''
list_a = [1, 2, 3, 4, 5]
list_b = ['a', 'b', 'c', 'd', 'e']
list_a.extend(list_b)
print(list_a)
[2, 3, 4, 5, 6, 7, 1, ['あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く']]
[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']

appendメソッドでは元のリストの中に、追加したリストがそのまま入って二次元リストになっています。一方でextendメソッドでは追加したリストの要素だけがそのまま末尾に追加されています。

この点をしっかり覚えておきましょう。

3. Pythonのappendはlist(リスト)以外には使えない

ここからはある意味蛇足ですが、勘違いする方をたまに見るので念のため解説しておきます。

Pythonのappendはlist(リスト)のメソッドなので、他には使えません。他のオブジェクトで要素を追加したい場合は別の方法を使います。それぞれ見ていきましょう。

3.1. Pythonのappendとtuple(タプル)

Pythonのappendメソッドはタプルには使えません。タプルはイミュータブル(変更不可能)なオブジェクトのため、後から要素を追加するということがそもそも不可能なように作られているからです。

In [1]:
''' タプルはイミュータブルなオブジェクトのためappendメソッドは使えません。'''
tuple = (1, 2, 3, 4, 5)
tuple.append(6)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-03c883abbd72> in <module>
      1 tuple = (1, 2, 3, 4, 5)
----> 2 tuple.append(6)

AttributeError: 'tuple' object has no attribute 'append'

タプルに要素を追加したい場合は、例えば、次のように、その要素を追加した別の新しいタプルを作る必要があります。

In [1]:
''' タプルに要素を追加するのはできないので新しいタプルを作る必要があります。'''
tuple = (1, 2, 3)
new_tuple = tuple + (4, 5)
print(new_tuple)
(1, 2, 3, 4, 5)

3.2. Pythonのappendとstr(文字列)

Pythonの文字列もイミュータブル(変更不可能)なオブジェクトのため、appendメソッドで元の文字列に変更を加えることはできません。

In [1]:
str = 'これは文字列'
str.append('です。')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-20-29ae48f45c7a> in <module>
      1 str = 'これは文字列'
----> 2 str.append('です。')

AttributeError: 'str' object has no attribute 'append'

代わりに次のような方法を使います。

In [1]:
''' 文字列では次の方法を使います。 '''

#  +演算子
str_a = 'これは文字列'
str_b = 'です。'
str_c = str_a + str_b  # 元の文字列を連結した別の文字列オブジェクトを作ります。
print(str_c)

# formatメソッド
str_d = '{}{}'  #  元の文字列を連結した別の文字列オブジェクトを作ります。
print(str_d.format(str_a, str_b))

#  fプリフィクス
str_e = f'{str_a}{str_b}'  #  元の文字列を連結した別の文字列オブジェクトを作ります。
print(str_e)
これは文字列です。
これは文字列です。
これは文字列です。

それぞれ『Pythonで文字列を連結/結合する方法まとめ』でご確認ください。

3.3. Pythonのappendとdict(辞書)

辞書にもappendは使えません。辞書はミュータブル(変更可能)ですが、1つの要素にはキーと値という2つのデータがあるオブジェクトなので別の方法を使わなければならないのです。

In [1]:
''' 辞書にもappendメソッドは使えません。 '''
dict = {'a':1, 'b':2, 'c':3}
dict.append('d')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-50fafea6280d> in <module>
      1 ''' 辞書にもappendメソッドは使えません '''
      2 dict = {'a':1, 'b':2, 'c':3}
----> 3 dict.append('d')

AttributeError: 'dict' object has no attribute 'append'

辞書に要素を追加するには次のような方法があります。文字列やタプルと違って、辞書はミュータブルなので、元の辞書を変更することができる点にご注目ください。

In [1]:
''' 辞書では次の方法を使います。 '''
dict = {'a':100, 'b':200, 'c':300}

#  []を使う。
dict['d'] = 400
print(dict)

#  setdefaultメソッドを使う。
dict.setdefault('e', 500)
print(dict)

#  updateメソッドを使う。
another_dict = {'f':600, 'g':700}
dict.update(another_dict)
print(dict)
{'a': 100, 'b': 200, 'c': 300, 'd': 400}
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500, 'f': 600, 'g': 700}

これらについては『Pythonの辞書(dict)に要素を追加する方法まとめ』で解説しています。

3.4. Pythonのappendとset(集合)

Pythonの集合にもappendメソッドは使えません。appendメソッドはリストの末尾に新しい要素を追加するメソッドですが、集合の場合は、そもそも各要素に順序がない(=インデックス番号がない)ためです。

In [1]:
''' 集合にもappendメソッドは使えません。 '''
set = {1, 2, 3}
set.append(4)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-21-6256c329d289> in <module>
      1 ''' 集合にもappendメソッドは使えません。 '''
      2 set = {1, 2, 3}
----> 3 set.append(4)

AttributeError: 'set' object has no attribute 'append'

集合に要素を追加するにはaddメソッドを使います。

In [1]:
''' 集合ではaddメソッドを使います。 '''
set = {1, 2, 'あ', 'い'}

#  addメソッドで要素を追加します。
set.add(3)
print(set)

set.add('う')
print(set)
{1, 2, 3, 'い', 'あ'}
{1, 2, 3, 'う', 'い', 'あ'}

Pythonのset(集合)の基礎知識と抑えておきたい操作方法まとめ』でも解説しているので確認してみてください。

3.5. Pythonのappendとnumpyのarray(配列)

Pythonのappendはnumpyのarray(配列)にも使えません。arrayはnumpyライブラリを利用して作るオブジェクトで、要素の追加にはメソッドではなく関数を使うように設計されて今明日。

In [1]:
''' numpyの配列にも使えません。 '''
import numpy as np
array = np.array([1, 2, 3])
array.append(4)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-22-dc17991f387f> in <module>
      2 import numpy as np
      3 array = np.array([1, 2, 3])
----> 4 array.append(4)

AttributeError: 'numpy.ndarray' object has no attribute 'append'

numpyのarray(配列)に要素を追加するには次のような方法があります。

In [1]:
''' numpyのarray(配列)に要素を追加する方法 '''
import numpy as np
array1 = np.array([0, 1, 2])
print(array1)

#  append関数を使う。
array2 = np.append(array1, 3)
print(array2)

#  insert関数を使う。
array3 = np.insert(array1, 3, 3)  #引数は配列、挿入する位置、挿入する値の順番
print(array3)
[0 1 2]
[0 1 2 3]
[0 1 2 3]

PythonでNumPyの配列(array)の値を追加・削除する方法まとめ』で解説しているのでご確認ください。

4. まとめ

Pythonのappendメソッドは、リストの末尾に任意の要素を追加するために使います。注意点としては、元のリストに要素を追加するので、元のリストが変化するということを覚えておきましょう。

また、appendで元のリストに別のリストを追加すると、自動で二次元リストになります。二次元リストにするのではなく、別のリストの要素だけを追加したい場合はextendメソッドを使います。

また、appendメソッドはリストのメソッドです。文字列やタプルはそもそもいミュータブル(変更不可能)なオブジェクトのため、要素の追加はできません。要素を追加した新しいオブジェクトを作る必要があります。

辞書、集合、numpyの配列はミュータブル(変更可能)ですが、データの型が異なるため別の方法を使う必要があります。

それぞれ、しっかり頭に入れておきましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる