Python 中的物件列表排序

Vaibhhav Khetarpal 2023年10月10日
  1. 在 Python 中使用 list.sort() 方法對物件列表進行排序
  2. 在 Python 中使用 sorted() 函式對物件列表進行排序
Python 中的物件列表排序

Python 列表不是同質的,這使得它們與 Python 中提供的其他資料型別不同。

List 的索引從 0 作為第一個索引開始,並按順序完成。列表中的所有元素都有其明確的位置,因此列表中允許重複。

本教程將介紹在 Python 中對物件列表進行排序的不同方法。

在 Python 中使用 list.sort() 方法對物件列表進行排序

list.sort() 方法按升序或降序對所有列表元素進行排序。

它包含兩個可選引數,keyreversekey 引數,顧名思義,是排序過程的關鍵。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 提供了一個內建的 sorted() 函式,可以替代 list.sort() 函式。

雖然 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