Pythonでネストされたリスト(入れ子リスト)をコピーする3つの方法を解説
このチュートリアルでは、Pythonでネストされたリスト(入れ子のリスト)をコピーするさまざまな方法を紹介します。ネストされたリストは単純な copy() やスライスでは完全に複製できないため、それぞれの方法の特徴を理解しておくことが重要です。それでは、一つずつ見ていきましょう。
方法1:forループを使ってコピーする
まずは、ループを使ってネストされたリストをコピーする方法です。これは最も基本的で一般的なアプローチです。
コード例
# リストの初期化
nested_list = [[1, 2], [3, 4], [5, 6, 7]]
# 空のリストを作成
copy = []
for sub_list in nested_list:
# 一時的なリスト
temp = []
# サブリストの要素を反復処理
for element in sub_list:
# 要素をtempリストに追加
temp.append(element)
# tempリストをcopyに追加
copy.append(temp)
# リストを出力
print(copy)
実行結果
上記のコードを実行すると、次のような出力が得られます。
[[1, 2], [3, 4], [5, 6, 7]]
外側と内側の両方のリストに対して新しいリストオブジェクトを作成しているため、元のリストとは独立した完全なコピーが得られます。
方法2:リスト内包表記とアンパッキング演算子を使う
次に、リスト内包表記とアンパッキング演算子(*)を組み合わせた、より簡潔な書き方を見てみましょう。
コード例
# リストの初期化 nested_list = [[1, 2], [3, 4], [5, 6, 7]] # コピー処理 copy = [[*sub_list] for sub_list in nested_list] # コピーを出力 print(copy)
実行結果
上記のコードを実行すると、次のような出力が得られます。
[[1, 2], [3, 4], [5, 6, 7]]
[*sub_list] の部分で各サブリストの要素を展開して新しいリストを作成しているため、ネスト構造ごと独立したコピーになります。Pythonらしい簡潔な記述として人気のある方法です。
方法3:copyモジュールのdeepcopy()を使う
最後に、標準ライブラリの copy モデルにある deepcopy() メソッドを使う方法を紹介します。深いコピー(ディープコピー)を行うための専用関数で、任意の階層のネストにも対応できます。
コード例
# copyモジュールをインポート import copy # リストの初期化 nested_list = [[1, 2], [3, 4], [5, 6, 7]] # コピー処理 copy = copy.deepcopy(nested_list) # コピーを出力 print(copy)
実行結果
上記のコードを実行すると、次のような出力が得られます。
[[1, 2], [3, 4], [5, 6, 7]]
deepcopy() は再帰的にすべての階層を複製するため、どれだけ深くネストされたリストでも確実に独立したコピーを作成できます。特に複雑なデータ構造を扱う場合におすすめの方法です。
まとめ
今回は、Pythonでネストされたリストをコピーする3つの方法を紹介しました。
- forループ: 基本的で理解しやすい方法
- リスト内包表記+アンパッキング演算子: 簡潔でPythonicな書き方
- copy.deepcopy(): どんなに深いネストにも対応できる確実な方法
用途や可読性の要件に応じて、最適な方法を選択してください。チュートリアルについて不明な点がある場合は、コメント欄でお気軽に質問してください。
-
Pythonでリストを定義する方法とは?基本の書き方を初心者向けに解説
リスト(List)は、Pythonにおける基本的なシーケンス型データ構造の一つです。複数の要素を角括弧 [ ] で囲み、カンマで区切って表現します。各要素は文字列や数値など異なるデータ型が混在していても問題ありません。また、リストは順序付き(ordered)コレクションであるため、格納した要素の並び順は保持されます。個々の要素には、0から始まるインデックスを使ってアクセスできます。たとえば最初の要素はインデックス 0、2番目の要素は 1 で参照します。リストの定義例list1 = [physics, chemistry, 1997, 2000] list2 = [1, 2, 3, 4, 5]
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>