8.1 排序列表
在Python中排序列表是一項重要的操作,它可以幫助你整理數據以方便分析或展示。Python提供了多種列表排序的方法,每種方法都可能在不同的任務和需求中變得有用。
方法 sort()
方法sort()會在原地排序列表,即修改原始列表。它非常高效,並允許通過參數來調整排序。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # 輸出 [1, 2, 5, 9]
可以通過設置參數reverse=True來以相反的順序對列表進行排序。
numbers = [5, 2, 9, 1]
numbers.sort(reverse=True)
print(numbers) # 輸出 [9, 5, 2, 1]
函數 sorted()
函數sorted()將創建一個新的列表,該列表是原始列表的排序版本。原始列表不會因此改變,這常常使得sorted()成為在需要保持原始數據不變時的偏好選擇。
numbers = [5, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 輸出 [1, 2, 5, 9]
print(numbers) # 原始列表未改變 [5, 2, 9, 1]
重要的是要記住sort()會改變原列表,而sorted()會返回一個新的排序列表,並保留原始列表不變。當你需要在原地修改數據時使用sort(),而當你想保持數據的原始順序時使用sorted()。
8.2 根據鍵排序
有時候需要更複雜的排序方案,或者忽略某些參數進行排序。在這種情況下,「根據鍵排序」就派上用場了。要使用它,需要將特殊參數key傳遞給方法sort()或函數sorted()。
作為參數key的值,你需要傳遞一個在比較元素時會使用的函數。
不區分大小寫的字符串比較
比較之前,所有字符串都會轉換為小寫
alist = ["banana", "Orange", "Kiwi", "cherry"]
alist.sort(key=str.lower)
print(alist) # 輸出 ['banana', 'cherry', 'Kiwi', 'Orange']
範例:排序元組列表
假設你有一個學生的列表,其中每個元素都是一個包含學生姓名和其成績的元組(tuple)。你希望按學生的成績來排序:
students = [('Alice', 88), ('Bob', 75), ('Carol', 96)]
def get_grade(student):
return student[1]
students.sort(key=get_grade)
print(students) # 輸出 [('Bob', 75), ('Alice', 88), ('Carol', 96)]
範例:排序字典列表
或者你有一個字典列表,其中每個字典都包含學生的信息。要按他們的成績排序,需要寫出這樣的代碼:
students = [
{'name': 'Alice', 'grade': 88},
{'name': 'Bob', 'grade': 75},
{'name': 'Carol', 'grade': 96}
]
def get_grade(student):
return student['grade']
sorted_students = sorted(students, key=get_grade)
print(sorted_students) # 輸出 [{'name': 'Bob', 'grade': 75}, {'name': 'Alice', 'grade': 88}, {'name': 'Carol', 'grade': 96}]
GO TO FULL VERSION