Pythonの append
はコードを記述する上でも頻出するメソッドです。Pythonを使う人は慣れておく必要がありますので、しっかり習得していきましょう。
今回はlist型 の append
メソッドについてになります。
まず、list型(リスト)について確認しておきましょう。
list とは
list 型はシーケンス(配列)であり、データの追加、削除が可能な型のことです。
なお、シーケンスについては以下の記事を参考にして下さい。
【Python】文字列シーケンスの使い方のまとめ
続きを見る
今回は、追加をするために必要なメソッドである append
の説明になります。
では早速、見ていきましょう。
appendとは
append
メソッドとは、リストにデータを追加するためのメソッドの1つです。
追加するメソッドは他に insert
、extend
がありますので、後で説明いたします。
リストには数値、文字列、オブジェクト、関数等、なんでも追加することができます。
appendはリストの末尾に追加する
appendの使い方
append の書き方
appendのコードの書き方は下記になります。
append はメソッドなので、カッコ書をつけて、その中に追加対象を入れます。
In[]
1 | リスト変数.append(追加対象) |
appendの使い方の基本
では、早速使ってみましょう。まず、下記のように list_a
を作ってください。
この list_a
に対して、追加していきます。
In[]
1 2 | list_a = [1, 2, 3, 4] list_a |
Out[]
1 | [1, 2, 3, 4] |
要素の追加
list_a
は1,2,3,4ときているので、次に「5」を追加しましょう。
下記コードを実行してください。ちゃんと「5」が追加されていることが確認できます。
In[]
1 2 | list_a.append(5) list_a |
Out[]
1 | [1, 2, 3, 4, 5] |
ここでは数値を扱っていますが、文字列でも同様です。
リストに別のリストの要素を追加
次に list_b = [6, 7]
を用意して、list_a
に追加してみましょう。
下記コードを実行して確認してみてください。
In[]
1 2 3 | list_b = [6, 7] list_a.append(list_b) list_a |
Out[]
1 | [1, 2, 3, 4, 5, [6, 7]] |
如何でしょうか。予想通りの結果になっているでしょうか?
append
による末尾の追加は、なんでもそのまま追加します。
ですので今回は[6, 7]が追加されます。
では、[1,2,3,4,5,6,7]にするにはどうするのでしょうか?次で説明します。
リストに別のリストを結合
先ほど、リストにリストを append
をすると、良くも悪くもそのまま末尾に追加されてしまいましたね。
リスト同士の結合は下記のようにします。動かしてみてください。
In[]
1 | list_a = list_a + list_b |
Out[]
1 | [1, 2, 3, 4, 5, 6, 7] |
[1,2,3,4,5,6,7]になりましたね。
こういう時は append
を使わないのです。append
は末尾に対象をそのまま追加します。
ちなみに、補足になりますが、下記のようにリスト+数値はエラーが発生します。
In[]
1 | list_a = list_a + 5 |
Out[]
1 2 3 4 5 6 7 | --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-39-46cdb6d7871e> in <module> ----> 1 list_a = list_a + 5 2 list_a TypeError: can only concatenate list (not "int") to list |
この様になりますが、下記のコードであればリスト同士になるので、エラーは出ません。
In[]
1 | list_a = list_a + [5] |
appendの使い方の応用
今まで、数値でしたが文字列なども取り扱ってみましょう。
違う型の追加
空の list_c
を作って、文字列、数値を追加してみます。
空のリストは list_c = []
で作れます。
では、下記を実行してみてください。文字列、数値と違う型の値があってもリストに追加できるのが確認できます。
In[]
1 2 3 4 5 | list_c = [] list_c.append('犬') list_c.append('ポチ') list_c.append(15) list_c |
Out[]
1 | ['犬', 'ポチ', 15] |
もう少し、実用的に深掘りしてみましょう。
さらに、list_dに[‘猫’, ‘タマ’, 5]
を作り、list_animal
に list_c
、list_d
を追加してみましょう。
まず、list_d
を作ってみましょう。下記コードですが、ご自身でも作ってみてください。
In[]
1 2 3 4 5 | list_d = [] list_d.append('猫') list_d.append('タマ') list_d.append(5) list_d |
さらに、list_animal
を作って、list_c
、list_d
を追加します。
これは list_animal
というリストに他のリストである list_c
と list_d
を追加しています。
In[]
1 2 3 4 | list_animal = [] list_animal.append(list_c) list_animal.append(list_d) list_animal |
Out[]
1 | [['犬', 'ポチ', 15], ['猫', 'タマ', 5]] |
如何でしょうか。動物リストができて、実用的になったと思います。
関数の追加
リストは関数でも入ってしまいます。試しに、足算をする関数をリストに入れて動かしてみましょう。
まず、足し算の関数を以下コードで宣言します。
In[]
1 2 | def func_add(x, y): return x+y |
次に、list_d
に [数値、数値、関数]
のリストである、 [1, 1, func_add]
と [1, 2, func_add]
を追加してみます。
In[]
1 2 3 4 | list_d = [] list_d.append([1, 1, func_add]) list_d.append([1, 2, func_add]) list_d |
Out[]
1 2 | [[1, 1, <function __main__.func_add(x, y)>], [1, 2, <function __main__.func_add(x, y)>]] |
関数である、func_add
もしっかり追加されていますね。
では、最後にこれらを使って、足算して結果を出力するところまでしたいと思います。
下記コードを実行してみてください。
In[]
1 2 | for a, b, func in list_d: print(f'{a}+{b}={func(a, b)}') |
Out[]
1 2 | 1+1=2 1+2=3 |
ちゃんと足し算されていることがわかりますね。for文で list
から取得している箇所を補足しておきます。
- for文でlist_dの中身を1つずつ取得する
- 取得されるのも[数値、数値、関数]とリストなので、a、b、funcに分けて取得
- printでa、bを表示しつつfunc_addであるfuncを実行して表示する
難易度が上がってしまいましたが、リストには関数も入るのだと覚えておいてください。
リストの要素を指定回数繰り返し、新しいリストの作成(内包表記)
リストに追加する時、append
を使うという話をしてきましたが、内包表記と呼ばれる方法がよく使われる場合があります。
例えば、1,2,…10
までを list_f
に追加する処理を考えましょう。まず、append
を使った方法で動かしてみましょう。下記コードになるので、実行してみて下さい。
for i in range(10)
で0から9までのループ処理をさせて、追加しています。
In[]
1 2 3 4 | list_f = [] for i in range(10): list_f.append(i+1) list_f |
Out[]
1 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
うまく動きましたね。実はこれは処理が遅くなるので、次に説明する内包表記が使われます。
書き方は次のようになります。
通常のfor文で取り出す、変数をfor文の前に追加して、[]
で囲います。
In[]
1 | リスト = [変数 for 変数 in データの集まり] |
実際に、先ほどの [1,2,…10]
をこの内包表記でコードを書いていきます。
Out[]
1 2 | list_f = [i+1 for i in range(10)] list_f |
1行で実現できましたね。しかも、この方が処理が早いのです。なので、Pythonを使っているとこの表記には頻繁に出会います。
内包表記の説明は長くなるので、こう言った方法でリストに値が追加できるのだということを覚えておいてください。
appendとextend、insert、それぞれの違い
リストに追加する処理は append
だけではありません、extend
、insert
があります。
その違いを改めて、list_a = [1, 2, 3, 4]
と list_b = [5, 6]
を用意して確認していきましょう。
append
, extend
, insert
には以下のような違いがあります。
extendの使い方
extend
はリストとリストを結合します。
動作的には、「リストに別のリストを結合」で説明した、list_a + list_b
と同じ動作になります。
In[]
1 2 3 4 | list_a = [1, 2, 3, 4] list_b = [5, 6] list_a.extend(list_b) list_a |
Out[]
1 | [1, 2, 3, 4, 5, 6] |
insertの使い方
insert
は末尾ではなく、第1引数で追加の場所をリストの要素Noを指定します。
下記実行例では、1番目を指定しています。
*要素Noは0番目から始める点に注意。
In[]
1 2 3 4 | list_a = [1, 2, 3, 4] list_b = [5, 6] list_a.insert(1, list_b) list_a |
Out[]
1 | [1, [5, 6], 2, 3, 4] |
appendの練習問題
下記表を append
を使って、リストに入れて、for文で順番に取り出して、print
で表示してみてください。
商品 | 価格 |
りんご | 100 |
オレンジ | 120 |
ぶどう | 500 |
回答例
回答例は下記になります。
In[]
1 2 3 4 5 6 | list_fruit = [] list_fruit.append(['りんご', 100]) list_fruit.append(['オレンジ', 120]) list_fruit.append(['ぶどう', 500]) for fruit, price in list_fruit: print(f'{fruit} 価格{price}') |
Out[]
1 2 3 | りんご 価格100 オレンジ 価格120 ぶどう 価格500 |
今回は以上となります。お疲れ様でした。