8.1 Sắp xếp danh sách
Sắp xếp danh sách trong Python là một thao tác quan trọng và nó cho phép sắp xếp dữ liệu để dễ dàng phân tích hoặc trình bày. Python cung cấp một số cách để sắp xếp danh sách, mỗi cách có thể hữu ích tùy thuộc vào nhiệm vụ và kết quả yêu cầu.
Phương thức sort()
Phương thức sort()
sắp xếp danh sách tại chỗ, tức là thay đổi danh sách gốc.
Nó rất hiệu quả và cho phép tùy chỉnh sắp xếp thông qua các tham số.
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # Sẽ in ra [1, 2, 5, 9]
Có thể sắp xếp danh sách theo thứ tự ngược lại bằng cách đặt tham số
reverse=True
.
numbers = [5, 2, 9, 1]
numbers.sort(reverse=True)
print(numbers) # Sẽ in ra [9, 5, 2, 1]
Hàm sorted()
Hàm sorted()
tạo ra một danh sách mới, là
phiên bản đã được sắp xếp của danh sách gốc. Danh sách gốc không thay đổi,
điều này thường khiến sorted()
là lựa chọn ưu tiên khi
cần giữ nguyên dữ liệu gốc.
numbers = [5, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # Sẽ in ra [1, 2, 5, 9]
print(numbers) # Danh sách gốc không thay đổi [5, 2, 9, 1]
Quan trọng để nhớ rằng sort()
thay đổi danh sách gốc, còn sorted()
trả về một danh sách mới đã được sắp xếp, giữ nguyên bản gốc. Sử dụng sort()
nếu bạn cần thay đổi dữ liệu tại chỗ và sorted()
nếu bạn muốn giữ nguyên thứ tự dữ liệu gốc.
8.2 Sắp xếp theo khóa
Đôi khi cần những kịch bản sắp xếp phức tạp, hoặc sắp xếp mà bỏ qua một số tham số. Trong trường hợp này,
"sắp xếp theo khóa" là cứu cánh. Để sử dụng nó, cần truyền tham số
key
đặc biệt vào phương thức sort()
hoặc hàm sorted()
.
Như giá trị của tham số key
, cần truyền một hàm
sẽ được sử dụng để so sánh các phần tử.
So sánh chuỗi không phân biệt chữ hoa chữ thường
Trước khi so sánh, tất cả các chuỗi đều được chuyển thành chữ thường
alist = ["banana", "Orange", "Kiwi", "cherry"]
alist.sort(key=str.lower)
print(alist) # Sẽ in ra ['banana', 'cherry', 'Kiwi', 'Orange']
Ví dụ sắp xếp danh sách các tuple
Giả sử bạn có danh sách học sinh, trong đó mỗi phần tử là một
(tuple)
, chứa tên học sinh và điểm số của họ. Bạn muốn sắp xếp
học sinh theo điểm số:
students = [('Alice', 88), ('Bob', 75), ('Carol', 96)]
def get_grade(student):
return student[1]
students.sort(key=get_grade)
print(students) # Sẽ in ra [('Bob', 75), ('Alice', 88), ('Carol', 96)]
Ví dụ sắp xếp danh sách từ điển
Hoặc bạn có danh sách các từ điển, trong đó mỗi từ điển chứa thông tin về học sinh. Để sắp xếp chúng theo điểm số, cần viết mã như sau:
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) # Sẽ in ra [{'name': 'Bob', 'grade': 75}, {'name': 'Alice', 'grade': 88}, {'name': 'Carol', 'grade': 96}]
GO TO FULL VERSION