【Python】リストに要素を追加する方法を初心者向けに解説

はじめに

Pythonをはじめて学ぶとき、多くの方が最初に触れるのがリストかもしれません。
配列のように扱えるため、さまざまな場面でデータをまとめて管理したり、別のソースから読み込んだ情報をどんどん追加したりすることができます。

たとえば、プログラムの実行中に取得したデータをどこかに蓄えたいときや、外部ファイルやAPIから取得した情報を組み合わせて処理したいときなど、実務や学習で出番は少なくありません。
とくにPythonのリストは柔軟性が高く、あとから要素を追加したり削除したりする操作がとても簡単にできます。

しかし、いざ「リストに要素を加えたい」と思ったときに「どんな方法があるのだろう」「appendやextendの違いって何だろう」と疑問を持つことはないでしょうか。
そうした基本的なポイントを押さえておくと、コードをシンプルに書くことができる上に、実務で使う際にも混乱が少なくなるはずです。

この記事では、リストに要素を追加する複数の方法と、それぞれの活用シーンについて初心者の方に向けてわかりやすく解説します。
技術的な内容の紹介だけでなく、実際にどのように使うと便利なのかも含めてまとめていきます。

この記事を読むとわかること

  • Pythonのリストを使って要素を追加するための基本メソッドや構文の概要
  • appendやextendをはじめとした、追加方法ごとのメリットや注意点
  • 実務でリストを追加操作する際の具体的なイメージ

ここで紹介する情報を活かすと、複数の情報源から取得したデータを一つのリストにまとめて扱うといった処理を、スムーズに行えるようになるかもしれません。

リストの基本

リストとは何か

Pythonのリストは、いくつかの値をひとまとまりにして扱うための仕組みです。
数値や文字列など、さまざまなデータ型を混在させることも可能で、途中で要素を増やしたり、順番を変更したり、削除したりすることができます。

一般的には、次のようなケースで使われることが多いです。

  • ユーザーから入力された値を順番に保持する
  • ファイルから取り込んだ行データをすべて保管する
  • 計算結果を複数回ループして作成し、あとでまとめて処理する

Pythonのリストは、角かっこ [] を使って定義します。
シンプルな例としては、以下のように書くことができます。

fruits = ["apple", "banana", "cherry"]

このようにリストを定義すると、各要素のインデックス(0番目、1番目...)を使って値を取得したり、appendなどのメソッドを用いて新しい要素を追加することができます。

リストが実務でよく使われる理由

実務では、たとえばログを収集したり、複数のAPIレスポンスをまとめて管理したりする場面が多くあります。
そのときに、データを順番に追加していく手段としてリストはたいへん便利です。

たとえば、問い合わせフォームがあり、そこから送信されたコメントを受け取り、リストにまとめる場面を想像してみてください。
毎回の受信内容をリストに追加していけば、あとで一括処理したり、コメントを検索したりするときに整合性が保ちやすくなります。

Pythonのリストは、サイズをあらかじめ指定する必要がないため、とくに「何件追加されるか事前にはわからない」ようなケースでも柔軟に対応できます。
ここが固定長の配列と大きく異なるポイントであり、リストの使いやすさにつながっています。

要素を追加する主な方法

appendを使った末尾への追加

リストに値を追加するときにまず覚えたいのが append です。
これは、既存のリストの末尾に新しい要素を1つだけ加えたいときに使います。

コード例を見てみましょう。

numbers = [1, 2, 3]
numbers.append(4)
print(numbers)  # [1, 2, 3, 4]

上記では、最初に [1, 2, 3] が代入された変数 numbers に対して、 numbers.append(4) を呼び出しています。
すると、末尾に4が加わり、結果的に [1, 2, 3, 4] となります。

たとえば、一定間隔で温度を測定してリストに蓄積する場面でも使えます。
計測のたびに temperatures.append(new_temp) のように追加していけば、後でグラフを作成したり、統計的な処理を行ったりしやすくなるでしょう。

appendは1つの要素を扱うときには非常にシンプルで分かりやすい方法です。
単一の値をどんどん追加していきたいときは、まずこのappendを使うのが定番といえます。

extendでリストを結合する

別のリストの要素をすべて取り込む場合は extend を使います。
似たようなメソッドとしてappendでもリストを渡すことはできますが、その場合は「リスト自体がひとつの要素」として追加されてしまう点に注意が必要です。

たとえば、appendとextendの違いを実例で比較してみます。

# appendでリストを追加
list_a = [1, 2, 3]
list_b = [4, 5, 6]

list_a.append(list_b)
print(list_a)  # [1, 2, 3, [4, 5, 6]]

# extendでリストを追加
list_c = [1, 2, 3]
list_c.extend(list_b)
print(list_c)  # [1, 2, 3, 4, 5, 6]

同じように list_b というリストを追加しているのですが、appendはリストを要素として加えるため、結果が [1, 2, 3, [4, 5, 6]] のように入れ子になります。
一方、extendはリストの中身を展開して追加するため、 [1, 2, 3, 4, 5, 6] のように平坦なリストになります。

実務では、たとえば1日のうちで複数回に分けて取得したデータをまとめたい場合などにextendを使うと便利です。
複数のリストをまとめて一つに統合するときなどに活用しやすいでしょう。

insertで指定した位置に要素を挿入する

appendやextendは末尾への追加や、リストの全要素をつなげるといったケースでよく使われます。
しかし、要素を特定の位置に差し込みたい場合は insert が便利です。

insertは、リストの指定したインデックスの位置に新しい要素を挿入します。
以下の例をご覧ください。

names = ["Bob", "Charlie", "Eve"]
names.insert(1, "Alice")
print(names)  # ["Bob", "Alice", "Charlie", "Eve"]

もともと ["Bob", "Charlie", "Eve"] のリストがあり、 insert(1, "Alice") を呼び出したところ、インデックス1の位置に "Alice" が挿入されました。
その結果は ["Bob", "Alice", "Charlie", "Eve"] となります。

もし新しく追加する内容に優先度を付けたい場合や、ソートされたデータ構造を保ったまま新しい要素を挟み込みたい場合には、insertが活躍します。
とはいえ、要素数が大きいリストに対して頻繁にinsertを行うと、後ろの要素をすべてずらすため処理の負荷がかかることがあります。
そのため、insertは使いどころを見極めることがポイントです。

スライスを使った追加・置き換え

Pythonのリストにはスライスという仕組みがあり、複数の要素をまとめて扱うことができます。
スライスを使うと、新しいリストをある区間にまとめて挿入することが可能です。

例として、下記のように書くとわかりやすいでしょう。

colors = ["red", "blue", "green"]
# インデックス1の位置に複数の色をまとめて挿入
colors[1:1] = ["yellow", "pink"]
print(colors)  # ["red", "yellow", "pink", "blue", "green"]

ここでは colors[1:1] = ["yellow", "pink"] という代入を行っています。
インデックス1から1つも要素を取り除かず、その位置に "yellow", "pink" を挿入する形です。
スライスでは、範囲を指定して要素を削除したり差し替えたりすることもできるので、まとめて操作したい場合には便利な方法です。

たとえば、ログの一部を別途抽出してから再挿入するようなケースをイメージすると、スライスの活用でコードをシンプルに書けるかもしれません。

+ 演算子(リストの結合)

リストを結合するときに + を使うと、2つのリストを新しいリストとして返します。
extendと異なり、もとのリスト自体が変更されるわけではなく、新たなリストオブジェクトが作成されることに注意してください。

list_a = [1, 2, 3]
list_b = [4, 5, 6]
combined = list_a + list_b
print(combined)  # [1, 2, 3, 4, 5, 6]
print(list_a)    # [1, 2, 3]

このように、 +リストを再生成 して返します。
既存のリストをそのまま維持したい場合には便利ですが、一方で大きなリストを結合するときはメモリの使い方に注意が必要です。
extendの場合は元のリストに要素が追加されるため、処理の仕組みがやや異なります。

実務では、何らかの既存リストを破壊的に変更したくない場合や、途中段階のリストを残しておきたいケースで + を使うことがあるでしょう。

実務で意識したいポイント

大量データを扱うときの方針

リストは要素数が動的に変化できる分、使い方が簡単で柔軟ですが、大量の要素を何度も追加・削除する操作があるときは注意が必要です。
insertのようにリストの途中に要素を差し込む操作が多いと、全体の処理が遅くなることがあります。

たとえば、何十万件というデータを対象に毎回insertを呼び出すと、そのたびに要素の移動が起きるため、積み重なると時間がかかるケースがあるかもしれません。
データの量や使い方によっては、deque(デック)などの別のデータ構造や、データベースに直接書き込む方法を検討してもよいでしょう。

Pythonのリストは使いやすいですが、 使い方に応じて注意すべき点がある ことも頭に入れておくと、実務でより最適な手段を選べるはずです。

リストを追加していくときの初期化のタイミング

実務で起こりがちなトラブルとして、同じリストを使い回しているうちに意図しない要素が残ってしまうことがあります。
とくにループの中でリストを初期化し忘れて、前回処理した要素が再び残ってしまうようなケースには注意が必要です。

たとえば、日次処理で1日の売上データをリストに追加して集計を行い、翌日も同じリストを使い続けると、前日の売上分が残ったままになってしまうことがあります。
新しい日付ごとにリストをクリアするのであれば、 list_obj.clear() や新しく空のリストを作成するなど、きちんと初期化する手段を明確にしておきましょう。

複数の処理ステップで同じリストを参照しているときは、意図せず値が変更されることがあるため注意が必要です。

メソッドの選び方と可読性

appendを使う場合とextendを使う場合、どちらも結局はリストの要素を後ろに追加する点では似ています。
しかし、可読性や意図を明確にするために、「この処理では単一の要素しか追加しない」と決まっているならappendのほうが伝わりやすいといったこともあるでしょう。

反対に、「別のリストを結合したい」「リスト同士を合体させて最終的にひとつにまとめたい」ような状況ではextendや + が適切です。
メソッドを使い分けることで、コードを読む人にも明確に意図が伝わりやすくなります。

可読性を損なわずに処理を進めるためには、「こうした場面ではこのメソッドを使う」という基準を決めておくことが重要です。
実務で共同開発をするなら、チームのコーディング規約やスタイルに沿って書くことも大切になるかもしれません。

リストの追加操作を応用する

まとめて要素を生成してから追加

たとえば、Webサイトのログやユーザーの操作履歴を随時取得していくとき、最初にある程度の要素を用意してから一括でリストに追加するとスムーズな場合があります。

1つずつappendしてもいいですが、あらかじめ複数の新規データをリストとして作っておき、それをextendする形で加えると、いちいちループでappendを呼び出すよりも分かりやすいことがあります。

actions_today = ["login", "view_page", "logout"]
all_actions = ["login", "download_file"]
# 本日分のアクションを一括追加
all_actions.extend(actions_today)
print(all_actions)  # ["login", "download_file", "login", "view_page", "logout"]

今回の例では、 actions_today に新しい操作履歴をまとめて格納しておき、 all_actions にextendしています。
こうすると、操作履歴を追加する処理と、それを保管用のリストに連結する処理を明確に分けて書くことができます。

タプルや他のデータ型を追加したい場合

appendやextendの引数には、リストに限らずタプルや文字列などを渡すこともできます。
extendを文字列に対して使うと、文字列を1文字ずつ要素として追加してしまう点には注意が必要です。

たとえば以下のようなコードを見てください。

list_example = [1, 2]
list_example.append((3, 4))
print(list_example)  # [1, 2, (3, 4)]

list_example.extend("abcd")
print(list_example)  # [1, 2, (3, 4), 'a', 'b', 'c', 'd']

ここで append((3,4)) はタプル (3,4) を1つの要素として追加しています。
一方で extend("abcd") は文字列 "abcd" を1文字ずつに分解して要素を追加するため、結果に 'a', 'b', 'c', 'd' が並ぶことになります。

実務でファイル名の一覧や、区切り文字で分割した文字列を扱うときにも、同様に意図しない追加にならないように気をつける必要があります。

型のミスマッチを起こさないための注意

Pythonのリストは型を混在させることができますが、あまりにもさまざまなデータ型を詰め込みすぎると、あとで扱いが難しくなる場合があります。
数値や文字列だけでなく、辞書型や関数オブジェクトなどを混在させることも可能ですが、予期せぬエラーのもとになることがあります。

実務でデータを追加していくときは、あらかじめリストにどのような型のデータを入れることを想定しているのかを決めておくと安心です。
たとえば、使用する場面ごとにリストの役割を明確化し、「ここでは文字列のリストだけを扱う」「ここでは数値のリストだけにする」といった取り決めを行うことが多いです。

ひとつのリストに複数の型を混在させるのは可能ですが、可読性や保守性の観点から意図的に行うかどうかを慎重に判断しましょう。

リスト追加操作のまとめ実装例

ここまで紹介した方法を踏まえ、もう少し複雑な例としてまとめてみます。

例:カテゴリごとのエラーメッセージを管理する

下記では、エラーの種類ごとに複数のメッセージをまとめるためのリスト操作を行っています。

def categorize_errors(error_list):
    critical_errors = []
    warning_errors = []
    
    for err in error_list:
        if err.startswith("CRITICAL"):
            critical_errors.append(err)
        elif err.startswith("WARNING"):
            warning_errors.append(err)
    
    # 通常のリスト
    other_errors = []
    
    # カテゴリに入らなかったエラーを全部入れる
    for err in error_list:
        if not (err.startswith("CRITICAL") or err.startswith("WARNING")):
            other_errors.append(err)
    
    # それぞれのリストを大きなリストにまとめる
    # まずはcritical_errorsとwarning_errorsをまとめる
    combined_list = critical_errors + warning_errors
    
    # さらにother_errorsをextendで追加する
    combined_list.extend(other_errors)
    return combined_list

all_errors = [
    "CRITICAL: Failed to connect to database",
    "INFO: Starting service",
    "WARNING: Disk usage is high",
    "CRITICAL: Out of memory",
    "WARNING: CPU temperature is high",
    "NOTICE: Scheduled maintenance"
]

sorted_errors = categorize_errors(all_errors)
print(sorted_errors)
# 出力例:
# [
#   "CRITICAL: Failed to connect to database",
#   "CRITICAL: Out of memory",
#   "WARNING: Disk usage is high",
#   "WARNING: CPU temperature is high",
#   "INFO: Starting service",
#   "NOTICE: Scheduled maintenance"
# ]

ここではエラーの種類に応じてリストを3つに分けています。
最後に critical_errors + warning_errors で新しいリストを作り、そこへ other_errors をextendして結合しています。

  • 重大な問題のリスト
  • 警告のリスト
  • 上記以外のリスト

のように分割しておくことで、エラーを整理しやすく、後でそれぞれの対処方法を分けて実行するといった発展も可能です。

この例は実務でもよくあるパターンで、複数の状態コードやログレベルなどに応じてリストを分割したり、逆に結合して扱いやすい形に並べ替えたりします。

まとめ

Pythonのリストは、簡単な書き方で柔軟に要素を追加できるところが特徴です。
append、extend、insert、スライス、 + など、目的に応じて選べる手段が多いので、初めての方はまずappendやextendから試してみるとわかりやすいのではないでしょうか。

一方で、リストの途中に要素を差し込むときは動作コストが高くなることがあるなど、気をつけたいポイントもあります。
実務ではデータ規模や更新頻度に応じて、「本当にリストで管理するのがよいのか」「使うとしたらどのメソッドで追加するのが適切なのか」を検討すると失敗が減るでしょう。

加えて、意図した通りのデータ型や構造をまとめるために、appendやextendの挙動をしっかり理解しておくことが大切です。
とくに「リストをひとつの要素として追加したいのか」「リストの中身を展開して追加したいのか」で結果が変わる点は、初心者が混乱しやすいところかもしれません。

この記事を参考に、リストへ要素を追加するさまざまな方法を覚えて、実際のプログラミングで役立ててみてください。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。