Python でオブジェクトのリストを並べ替える

Vaibhhav Khetarpal 2023年10月10日
  1. Python で list.sort() メソッドを使用してオブジェクトのリストを並べ替える
  2. Python で sorted() 関数を使用してオブジェクトのリストを並べ替える
Python でオブジェクトのリストを並べ替える

Python リストは同種ではないため、Python で提供される他のデータ型とは異なります。

リストの索引付けは、最初の索引として 0 から始まり、順次実行されます。リスト内のすべての要素には明確な場所があります。これは、リスト内での複製が許可されているためです。

このチュートリアルでは、Python でオブジェクトのリストを並べ替えるさまざまな方法を紹介します。

Python で list.sort() メソッドを使用してオブジェクトのリストを並べ替える

list.sort() メソッドは、すべてのリスト要素を昇順または降順で並べ替えます。

これには、keyreverse の 2つのオプションのパラメーターが含まれています。key パラメータは、その名前が示すように、並べ替えプロセスのキーとして機能します。reverse パラメーターは、ソート順を決定するために使用されます。reverse の値が True の場合、ソートは逆順/降順で行われます。

ただし、この関数は、前述のオプションのパラメーターを使用しなくても問題なく機能します。

次のコードは、list.sort() メソッドを使用して Python でオブジェクトのリストを並べ替えます。

class BankEMP:
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age

    def __repr__(self):
        return "{" + self.name + ", " + self.dept + ", " + str(self.age) + "}"


if __name__ == "__main__":

    emps = [
        BankEMP("Elijah", "IT", 20),
        BankEMP("Nik", "Banking", 21),
        BankEMP("Lucien", "Finance", 19),
    ]
    # sort list by `name` in the natural order
    emps.sort(key=lambda x: x.name)
    print(emps)

    # sort list by `name` in reverse order
    emps.sort(key=lambda x: x.name, reverse=True)
    print(emps)

出力:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
[{Nik, Banking, 21}, {Lucien, Finance, 19}, {Elijah, IT, 20}]

key パラメーターの値を生成するには、operator.attrgetter() を使用できます。

attrgetter()operator モジュールからインポートされ、そのオペランドから属性をフェッチする呼び出し可能なオブジェクトを返すために使用されます。

次のコードは、list.sort() メソッドと operator.attrgetter() を使用して、Python でオブジェクトのリストを並べ替えます。

from operator import attrgetter


class BankEMP:
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age

    def __repr__(self):
        return "{" + self.name + ", " + self.dept + ", " + str(self.age) + "}"


if __name__ == "__main__":

    emps = [
        BankEMP("Elijah", "IT", 20),
        BankEMP("Nik", "Banking", 21),
        BankEMP("Lucien", "Finance", 19),
    ]
    # sort list by name in the natural order using 'attrgetter()'
    emps.sort(key=attrgetter("name"))

    print(emps)

出力:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]

Python で sorted() 関数を使用してオブジェクトのリストを並べ替える

Python には、list.sort() 関数の代替として機能する組み込みの sorted() 関数が用意されています。

list.sort() は特定の値を返さず、元のリストに変更を加えますが、sorted() 関数は元のリストに変更を加えるのではなく、ソートされたリストを返します。

sorted() 関数には、オプションのパラメーターとして reverse のみが含まれています。

次のコードは、sorted() 関数を使用して Python でオブジェクトのリストを並べ替えます。

class BankEMP:
    def __init__(self, name, dept, age):
        self.name = name
        self.dept = dept
        self.age = age

    def __repr__(self):
        return "{" + self.name + ", " + self.dept + ", " + str(self.age) + "}"


if __name__ == "__main__":

    emps = [
        BankEMP("Elijah", "IT", 20),
        BankEMP("Nik", "Banking", 21),
        BankEMP("Lucien", "Finance", 19),
    ]

    # sort list in natural order of name using sorted() function
    sort1 = sorted(emps, key=lambda x: x.name)
    print(sort1)

出力:

[{Elijah, IT, 20}, {Lucien, Finance, 19}, {Nik, Banking, 21}]
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

関連記事 - Python List