Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】リストをコピーする4つの方法を徹底解説

Pythonでリストをコピーするには、copy()メソッドスライス構文list()関数リスト内包表記の4つの方法があります。その中でもcopy()メソッドが最も直接的でシンプルな方法です。

Pythonでリストを扱っていると、既存のリストのコピーを作成したい場面に遭遇することがあります。たとえば、昨年度の生徒名簿をもとに新学期用の名簿を作成するプログラムを作る場合、元の名簿は残しておきたいはずです。

Pythonでリストをコピーする4つの方法

Pythonでリストをコピーするには、主に以下の4つの方法があります。

  • スライス構文を使う
  • copy()メソッドを使う
  • list()関数を使う
  • リスト内包表記を使う

この記事では、それぞれの方法についてサンプルコード付きで詳しく解説します。

なお、「=」(イコール)を使ってリストを代入することでもコピーのように見えますが、これは新しいリストが元のリストと同じオブジェクトを参照しているだけです。つまり、新しいリストを変更すると元のリストも一緒に変更されてしまうため、注意が必要です。

copy()メソッドでリストをコピーする

Pythonのcopy()メソッドは、既存のリストのコピー(シャローコピー)を作成します。copy()メソッドはリストオブジェクトに対して呼び出すもので、引数は不要です。戻り値として新しいリストを返します。

copy()メソッドを使えば、元のリストを一切変更することなく、その複製を作ることができます。

書き方は非常にシンプルで、リスト名の後ろに.copy()を付けるだけです。以下がcopy()メソッドの基本構文です。

new_list = old_list.copy()

copy()メソッドの使用例

実際にcopy()メソッドの使い方を見てみましょう。ここでは、果物屋台を経営していて、夏の季節に合わせて商品リストを更新したい場面を想定します。

春の商品リストをベースに夏の新しい商品リストを作りたいのですが、古いリストも後で参照できるように残しておきたいとします。こうすることで、前の季節に売っていた商品と今の季節の商品をそれぞれ別々に管理できます。

このような場合、copy()メソッドを使ってリストを複製すれば簡単に実現できます。以下がその例です。

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = spring_fruits.copy()

print(summer_fruits)

実行結果:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

まず1行目で、春に販売した果物を格納する変数spring_fruitsを定義しています。

次に、copy()メソッドを使って、spring_fruitsの全要素を含む新しいリストsummer_fruitsを作成します。最後に、print()関数でsummer_fruitsの内容をコンソールに出力しています。ご覧のとおり、summer_fruitsには元のリスト(spring_fruits)と同じ値がすべて含まれています。

これでリストのコピーができたので、append()メソッドやremove()メソッドを使って、夏の商品ラインナップに合わせて自由に変更を加えることができます。

スライスでリストをコピーする

スライスは、Pythonでリストから要素を取り出すためのテクニックです。スライスを使うと、リスト内の個別の要素、複数の要素、あるいはすべての要素を取得できます。

先ほどの果物屋台の例を使って、スライスによるリストのコピー方法を見てみましょう。春に販売した商品をすべて含む夏の商品リストを新しく作りたい場合、スライスクローン([:])を使えば実現できます。

以下が、スライスクローンでリストのコピーを作成するコードです。

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = spring_fruits[:]

print(summer_fruits)

実行結果:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

コードの内容はcopy()メソッドの例とほぼ同じですが、copy()の代わりにPythonのクローン記法「[:]」(角括弧の中にコロン)を使用している点が異なります。この記法により、元のリスト全体のコピーが作成されます。

list()関数でリストをコピーする

list()関数を使ってもリストのコピーを作成できます。list()関数は1つの引数を受け取ります。それはリストに変換したいオブジェクトです。以下がlist()関数の基本構文です。

list(list_name)

こちらも果物屋台の例で確認してみましょう。春の果物リストをもとに、list()関数で夏の果物リストを作成する例です。

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = list(spring_fruits)

print(summer_fruits)

実行結果:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

このように、list(spring_fruits)summer_fruitsに代入することで、spring_fruitsのコピーが作成され、summer_fruitsとして保存されます。その後、print()関数で新しいリストの内容をコンソールに出力しています。

リスト内包表記でリストをコピーする

リスト内包表記を使うと、簡潔にリストを作成できます。for…in式を使うのが特徴です。

リスト内包表記では、forループで既存のリストの全要素を順番に取り出し、それらを新しいリストに格納していきます。

Pythonにおけるリスト内包表記の基本構文は次のとおりです。

new_list = [i for i in old_list]

実際に、春の果物リストをもとに、リスト内包表記で夏の果物リストを作成してみましょう。

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = [i for i in spring_fruits]

print(summer_fruits)

実行結果:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

リスト内包表記によって新しいリストsummer_fruitsが作成され、元のspring_fruitsリストのすべての値が含まれていることがわかります。

まとめ

この記事では、Pythonでリストのコピーを作成する4つの方法を解説しました。copy()メソッド、スライスクローン([:])、list()関数、そしてリスト内包表記です。

それぞれの方法には特徴がありますが、最も直感的で読みやすいのはcopy()メソッドです。用途に応じて使い分けるとよいでしょう。これでPythonでリストをコピーする方法はマスターできました!

  1. Pythonでリストを定義する方法とは?基本の書き方を初心者向けに解説

    リスト(List)は、Pythonにおける基本的なシーケンス型データ構造の一つです。複数の要素を角括弧 [ ] で囲み、カンマで区切って表現します。各要素は文字列や数値など異なるデータ型が混在していても問題ありません。また、リストは順序付き(ordered)コレクションであるため、格納した要素の並び順は保持されます。個々の要素には、0から始まるインデックスを使ってアクセスできます。たとえば最初の要素はインデックス 0、2番目の要素は 1 で参照します。リストの定義例list1 = [physics, chemistry, 1997, 2000] list2 = [1, 2, 3, 4, 5]

  2. Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け

    Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>