Pythonで使えるリスト操作テクニック10選!

Pythonのロゴとテキストエディター上でのリスト操作のサンプルコードが映し出されているイメージPython

 

【当サイトはコードのコピペ・商用利用OKです】

このサービスはASPや、個別のマーチャント(企業)による協力の下、運営されています。

記事内のコードは基本的に動きますが、稀に動かないことや、読者のミスで動かない時がありますので、お問い合わせいただければ個別に対応いたします。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10000時間以上』を満たすプログラマ集団によって監修されています。

はじめに

Pythonでリスト操作を行う際のテクニック10選を初心者目線で解説します。

各テクニックには詳細な説明とサンプルコードがあり、初めてPythonを触る方でもすぐに取り組めます。

また、上級者の方にとってもリスト操作の新たな視点を提供できる内容となっております。

●Pythonとリストとは

Pythonは初学者にも扱いやすいプログラミング言語として広く知られています。

その特徴の一つが、リストと呼ばれるデータ構造です。

リストとは、複数の要素を一つの変数で扱うことができるデータ型のことを指します。

リストはPythonにおけるデータ操作の基本となるため、その理解と使い方を覚えておくことは重要です。

●Pythonでのリスト操作の基本

次に、Pythonでのリスト操作の基本を解説します。

○リストの作成

リストは角括弧[]を用いて作成します。

例えば、数値1, 2, 3を要素とするリストを作成するには、以下のようなコードを記述します。

list1 = [1, 2, 3]

このコードでは、変数list1に数値1, 2, 3を要素とするリストを割り当てています。

○リストへの追加

リストに新たな要素を追加するには、appendメソッドを使います。

下記のコードでは、既存のリストlist1に新たな要素4を追加します。

list1.append(4)

このコードを実行すると、list1は[1, 2, 3, 4]となり、新たに要素4が追加された状態になります。

○リストからの削除

リストから特定の要素を削除するには、removeメソッドを使います。

下記のコードでは、リストlist1から要素2を削除します。

list1.remove(2)

このコードを実行すると、list1は[1, 3, 4]となり、要素2が削除された状態になります。

以上が、Pythonでのリスト操作の基本的なテクニックになります。

これらの操作を理解し、活用することで、Pythonのリストを効率的に操作することが可能となります。

●Pythonでのリスト操作の応用

次に、Pythonでのリスト操作の応用について解説します。

これらのテクニックは、より複雑なリスト操作を可能にします。

○リスト内包表記

リスト内包表記は、Pythonの強力な特徴の一つです。

これにより、コードを短くし、リストの要素を効率的に生成することができます。

下記のコードは、1から10までの数値を二乗した値を要素とするリストを作成しています。

list2 = [i ** 2 for i in range(1, 11)]

このコードを実行すると、list2は[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]となります。

このようにリスト内包表記を使用することで、複雑なリストを効率的に生成することが可能になります。

○リストのフラット化

リストの中にリストが含まれるネストされたリストをフラットにするには、リスト内包表記を使います。

下記のコードは、ネストされたリストをフラットにする例です。

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [num for sublist in nested_list for num in sublist]

このコードを実行すると、flat_listは[1, 2, 3, 4, 5, 6, 7, 8, 9]となります。

ネストされたリストの要素を一つのリストにまとめることが可能です。

○2次元リストの操作

Pythonでは、リストの中に別のリストを格納することで、多次元のリスト(特によく使用されるのが2次元リスト)を作成できます。

2次元リストは、一言で言えば「リストのリスト」です。

2次元リストの操作に慣れることで、データ解析やAIのプログラミングなど、より高度な内容に挑戦する準備ができます。

それでは、2次元リストの作成とその要素の取り出し方についてのサンプルコードを紹介します。

このコードでは、まず2次元リストを作成し、その後で特定の要素を取り出しています。

# 2次元リストの作成
two_dimensional_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# リストの中のリストから要素を取り出す
print(two_dimensional_list[0][0])  # 1を出力
print(two_dimensional_list[1][2])  # 6を出力

このサンプルコードを実行すると、1と6が出力されます。

two_dimensional_list[0][0]では、まずtwo_dimensional_list[0]で最初のリスト[1, 2, 3]を取り出し、そのリストの最初の要素、つまり1を取り出しています。

同様にtwo_dimensional_list[1][2]では、2番目のリスト[4, 5, 6]から3番目の要素、つまり6を取り出しています。

このように2次元リストを使うと、行と列の概念を用いてデータを扱うことができます。

これは例えばスプレッドシートのデータを扱う際に非常に役立ちます。

ただし、2次元リストを使う際には注意が必要です。

リストの要素として別のリストを格納するため、その操作は1次元リストよりも複雑になります。

特に、2次元リストのコピーを作る場合には、単純に=を使ってコピーしようとすると、予期せぬ挙動を引き起こす可能性があります。

●Pythonでのリスト操作の注意点

Pythonでリストを操作する際には、いくつかの注意点があります。

ここでは、主に2次元リストのコピーについて説明します。

リストのコピーは、前述した通り=を使って行うことができます。

しかし、これは「浅いコピー」と呼ばれ、リストの中にリストがある場合(2次元リストなど)には元のリストとコピー先のリストが同じ内部リストを参照します。

このため、コピー先のリストの内部リストを変更すると、元のリストの内部リストも変わってしまいます。

この問題を避けるためには、「深いコピー」を行う必要があります。

これはcopyモジュールのdeepcopy関数を使って行います。

以下に、浅いコピーと深いコピーの違いを示すサンプルコードを示します。

このコードでは、まず浅いコピーを行い、その結果を出力しています。

その後、深いコピーを行い、その結果を出力しています。

import copy  # copyモジュールをインポート

# 2次元リストの作成
two_dimensional_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 浅いコピー
shallow_copied_list = two_dimensional_list
shallow_copied_list[0][0] = 100  # コピー先のリストを変更
print(two_dimensional_list[0][0])  # コピー元のリストも変わってしまう

# 深いコピー
deep_copied_list = copy.deepcopy(two_dimensional_list)
deep_copied_list[0][0] = 200  # コピー先のリストを変更
print(two_dimensional_list[0][0])  # コピー元のリストは変わらない

このサンプルコードを実行すると、最初に100が出力され、次に100が出力されます。

浅いコピーを行った場合、コピー先のリストを変更するとコピー元のリストも変わってしまいます。

しかし、深いコピーを行った場合、コピー先のリストを変更してもコピー元のリストは変わらないことがわかります。

このようなリストのコピーの特性を理解することは、Pythonでリストを操作する上で非常に重要です。

特に、リストの中にリストを持つような複雑なデータ構造を扱う場合には、この違いを理解しておくことで、思わぬバグを防ぐことができます。

以上、Pythonでのリスト操作の基本と注意点について解説しました。

次に、これまでに学んだリスト操作のテクニックを用いたサンプルコードを10選紹介します。

これらのコードを通じて、Pythonでのリスト操作の方法をより深く理解することができます。

●Pythonでのリスト操作のサンプルコード10選

それでは、Pythonでのリスト操作のサンプルコードを10選紹介します。

これらのサンプルコードを通じて、リスト操作の基本的な手法から、少し応用的な手法までを学んでいきましょう。

各サンプルコードには詳細な説明とともに、そのコードの実行結果がどうなるかを説明しています。

これにより、どのようにコードを書くとどのような結果が得られるのか、という結果と原因の関係を明確に理解することができます。

それでは、まずはリストの作成から始めましょう。

○サンプルコード1:リストの作成

Pythonでリストを作成するには、[](角括弧)を使用します。

要素はカンマ,で区切ります。

要素としては、数値や文字列、他のリストなど、Pythonのほぼ全てのオブジェクトを格納することができます。

下記のコードでは、数値と文字列を要素とするリストを作成しています。

そして、作成したリストをprint関数で出力しています。

# リストの作成
my_list = [1, "apple", 3.14, [5, 6, 7]]
print(my_list)  # リストの出力

このサンプルコードを実行すると、[1, "apple", 3.14, [5, 6, 7]]が出力されます。

これは、作成したリストmy_listの内容をそのまま出力した結果です。

これがPythonでのリストの作成の基本的な手法です。

次に、作成したリストに新たな要素を追加する方法について見ていきましょう。

○サンプルコード2:リストへの追加

リストに新たな要素を追加するには、appendメソッドを使用します。

appendメソッドはリストの最後に新たな要素を追加します。

下記のコードでは、最初に数値のリストを作成し、その後でappendメソッドを使用して新たな数値を追加しています。

そして、追加後のリストをprint関数で出力しています。

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストへの追加
my_list.append(6)
print(my_list)  # リストの出力

このサンプルコードを実行すると、[1, 2, 3, 4, 5, 6]が出力されます。

これは、最初に作成したリストmy_listに新たに6を追加した結果です。

このように、appendメソッドを使用するとリストの最後に新たな要素を追加することができます。

次に、リストから特定の要素を削除する方法について見ていきましょう。

○サンプルコード3:リストからの削除

リストから特定の要素を削除するには、removeメソッドを使用します。

removeメソッドは指定した値をリストから削除します。

ただし、リスト内に同じ値が複数存在する場合、最初に見つかった値のみが削除されます。

下記のコードでは、最初に数値のリストを作成し、その後でremoveメソッドを使用して特定の数値を削除しています。

そして、削除後のリストをprint関数で出力しています。

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストからの削除
my_list.remove(3)
print(my_list)  # リストの出力

このサンプルコードを実行すると、[1, 2, 4, 5]が出力されます。

これは、最初に作成したリストmy_listから3を削除した結果です。

このように、removeメソッドを使用するとリストから特定の要素を削除することができます。

ただし、同じ値が複数存在する場合には注意が必要です。次に、リストの要素をソート(並び替え)する方法について見ていきましょう。

○サンプルコード4:リストのソート

リストの要素をソート(並び替え)するには、sortメソッドを使用します。

sortメソッドはリストの要素を昇順(小さい順)に並び替えます。

降順(大きい順)に並び替えたい場合は、sortメソッドの引数にreverse=Trueを指定します。

下記のコードでは、最初にランダムな数値のリストを作成し、その後でsortメソッドを使用してリストの要素をソートしています。

そして、ソート後のリストをprint関数で出力しています。

# リストの作成
my_list = [5, 2, 3, 4, 1]

# リストのソート
my_list.sort()
print(my_list)  # リストの出力

このサンプルコードを実行すると、[1, 2, 3, 4, 5]が出力されます。

これは、最初に作成したリストmy_listの要素を昇順にソートした結果です。

このように、sortメソッドを使用するとリストの要素をソートすることができます。

ただし、sortメソッドはリスト内の全ての要素が同じ型でなければならないという制限があります。

つまり、数値と文字列が混在するリストをソートすることはできません。

次に、リストの一部(スライス)を取り出す方法について見ていきましょう。

○サンプルコード5:リストのスライス

リストの一部(スライス)を取り出すには、[start:stop]の形式を使用します。

startはスライスの開始位置、stopはスライスの終了位置を表します。

startを省略した場合は最初から、stopを省略した場合は最後までがスライスの範囲となります。

下記のコードでは、最初に数値のリストを作成し、その後でスライスを使用してリストの一部を取り出しています。

そして、取り出した部分をprint関数で出力しています。

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストのスライス
sliced_list = my_list[1:3]
print(sliced_list)  # スライスの出力

このサンプルコードを実行すると、[2, 3]が出力されます。

これは、最初に作成したリストmy_listの2番目から3番目の要素を取り出した結果です。

このように、スライスを使用するとリストの一部を取り出すことができます。

ただし、Pythonのインデックスは0から始まるため、[1:3]のスライスは「2番目から3番目」の要素を取り出すことになります。

次に、リストのコピー方法について見ていきましょう。

○サンプルコード6:リストのコピー

リストをコピーするには、copyメソッドやリストのスライスを使用します。

これは、リストは参照型のデータであるため、単純に=で代入すると元のリストと新たなリストが同じオブジェクトを参照することになります。

そのため、元のリストの変更が新たなリストにも反映されてしまいます。

それを避けるために、copyメソッドやリストのスライスを使用します。

下記のコードでは、最初に数値のリストを作成し、その後でcopyメソッドを使用してリストをコピーしています。

そして、コピーしたリストをprint関数で出力しています。

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストのコピー
copied_list = my_list.copy()
print(copied_list)  # コピーしたリストの出力

このサンプルコードを実行すると、[1, 2, 3, 4, 5]が出力されます。

これは、最初に作成したリストmy_listをコピーした結果です。

このように、copyメソッドやリストのスライスを使用するとリストをコピーすることができます。

ただし、リストの中にリストが含まれる場合(ネストしたリスト)は、これらの方法では完全なコピーができません。

その場合は、copyモジュールのdeepcopy関数を使用します。

次に、リストの長さを取得する方法について見ていきましょう。

○サンプルコード7:リストの長さ

リストの長さ(要素の数)を取得するには、len関数を使用します。

下記のコードでは、最初に数値のリストを作成し、その後でlen関数を使用してリストの長さを取得しています。

そして、取得した長さをprint関数で出力しています。

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストの長さの取得
length = len(my_list)
print(length)  # リストの長さの出力

このサンプルコードを実行すると、5が出力されます。

これは、最初に作成したリストmy_listの長さ(要素の数)です。

このように、len関数を使用するとリストの長さを取得することができます。

○サンプルコード8:リスト内包表記

リスト内包表記は、リストを効率的に生成するための表記法です。複雑な処理を短く、かつ読みやすく書くことができます。

ここでは、0から9までの数値を2乗した結果を要素とする新しいリストを生成する例を挙げます。

# リスト内包表記
squared_numbers = [x**2 for x in range(10)]
print(squared_numbers)  # リストの出力

このコードでは、range(10)で0から9までの数値を生成し、それぞれの数値に対して2乗の計算(x**2)を行っています。

そして、その結果を元に新しいリストを生成しています。

print関数で出力すると、[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]という結果が得られます。

これは0から9までの各数値を2乗した結果をリストにしたものです。

○サンプルコード9:リストのフラット化

リストのフラット化とは、ネストされたリスト(リストの中にリストが含まれている状態)を1次元のリストに変換する操作のことを指します。

ここでは、リスト内包表記を使ってリストをフラット化する方法を紹介します。

# ネストされたリストの作成
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# リストのフラット化
flattened_list = [num for sublist in nested_list for num in sublist]
print(flattened_list)  # リストの出力

このコードでは、まず3つのリストを要素とするネストされたリストnested_listを作成しています。

その後、リスト内包表記を2段階使用してリストをフラット化しています。

print関数で出力すると、[1, 2, 3, 4, 5, 6, 7, 8, 9]という結果が得られます。

これは元のネストされたリストの全ての要素を1次元のリストにまとめたものです。

○サンプルコード10:2次元リストの操作

2次元リストとは、リストの要素がリストであるようなデータ構造のことを指します。

例えば、行列やテーブルデータは2次元リストで表現することができます。

ここでは、2次元リストから特定の行を取り出す方法を紹介します。

# 2次元リストの作成
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 特定の行の取得
row = matrix[1]
print(row)  # 行の出力

このコードでは、まず3つのリストを要素とする2次元リストmatrixを作成しています。

その後、インデックスを使用して特定の行(ここでは2行目)を取り出しています。

print関数で出力すると、[4, 5, 6]という結果が得られます。これは元の2次元リストの2行目の内容です。

まとめ

リストはPythonの中でも特に重要なデータ構造の一つであり、日常的なプログラミング作業において頻繁に使われます。

本記事では、リストの作成から操作、そして応用的なテクニックまで、初心者から上級者までが役立つリスト操作のテクニックを10選紹介しました。

各テクニックには詳細な説明とサンプルコードがあり、初めてPythonを学ぶ方でも理解しやすい内容となっています。

これらのテクニックはPythonのリスト操作の基本を理解する上で非常に重要です。

各テクニックを順番に試してみて、Pythonでのリスト操作に慣れていきましょう。