Python 中的物件列表排序
Python 列表不是同質的,這使得它們與 Python 中提供的其他資料型別不同。
List 的索引從 0 作為第一個索引開始,並按順序完成。列表中的所有元素都有其明確的位置,因此列表中允許重複。
本教程將介紹在 Python 中對物件列表進行排序的不同方法。
在 Python 中使用 list.sort()
方法對物件列表進行排序
list.sort()
方法按升序或降序對所有列表元素進行排序。
它包含兩個可選引數,key
和 reverse
。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 提供了一個內建的 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 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