Cách sắp xếp danh sách trong Python (Tăng dần & Giảm dần)
Tìm hiểu cách sắp xếp danh sách trong Python bằng phương thức Sort() và hàm Sort(). Khám phá các ví dụ về sắp xếp khóa tùy chỉnh và thứ tự đảo ngược.
Tổng quan
Sắp xếp dữ liệu là một trong những nhiệm vụ phổ biến nhất trong lập trình, cho dù bạn sắp xếp hồ sơ người dùng theo độ tuổi, liệt kê sản phẩm theo giá hay sắp xếp kết quả tìm kiếm. Python cung cấp hai cách tích hợp sẵn, được tối ưu hóa cao để sắp xếp danh sách: phương thức `list.sort()` và hàm `sorted()`. Cả hai đều sử dụng thuật toán sắp xếp hiệu quả cao gọi là Timsort, chạy với độ phức tạp thời gian O(N log N).
Sự khác biệt chính giữa hai là khả năng biến đổi. Phương thức `list.sort()` sắp xếp danh sách tại chỗ, nghĩa là nó trực tiếp sửa đổi danh sách gốc và trả về `None`. Mặt khác, hàm `sorted()` giữ nguyên danh sách ban đầu và trả về một danh sách được sắp xếp hoàn toàn mới. Sự khác biệt này rất quan trọng: sử dụng `sort()` khi bạn muốn tiết kiệm bộ nhớ và không cần thứ tự ban đầu, đồng thời sử dụng `sorted()` khi bạn cần giữ nguyên danh sách gốc hoặc khi sắp xếp các vòng lặp không thuộc danh sách như bộ dữ liệu hoặc từ điển.
Cả hai phương pháp sắp xếp đều chấp nhận hai đối số từ khóa tùy chọn: `reverse` và `key`. Đối số `reverse` là một giá trị boolean; đặt nó thành `True` sắp xếp danh sách theo thứ tự giảm dần (đảo ngược). Đối số `key` chấp nhận một hàm được áp dụng cho từng phần tử trước khi so sánh. Điều này cho phép logic sắp xếp phức tạp, chẳng hạn như sắp xếp danh sách các chuỗi theo độ dài của chúng hoặc sắp xếp danh sách từ điển theo một khóa cụ thể.
Đầu ra mã & thực thi
Mã này trình bày cách sắp xếp danh sách các số bằng cách sử dụng cả sắp xếp() và sắp xếp(), sắp xếp ngược lại và sắp xếp khóa tùy chỉnh theo độ dài chuỗi.
numbers = [42, 7, 12, 89, 23]
# 1. Using sorted() (returns new list)
new_sorted = sorted(numbers)
print("Original:", numbers)
print("Sorted new list:", new_sorted)
# 2. Using sort() (in-place modification)
numbers.sort()
print("Modified original list:", numbers)
# 3. Sorting in reverse (descending)
numbers.sort(reverse=True)
print("Reverse sorted list:", numbers)
# 4. Custom sorting (by string length)
words = ["banana", "pear", "apple", "fig"]
words.sort(key=len)
print("Sorted by length:", words)Original: [42, 7, 12, 89, 23]
Sorted new list: [7, 12, 23, 42, 89]
Modified original list: [7, 12, 23, 42, 89]
Reverse sorted list: [89, 42, 23, 12, 7]
Sorted by length: ['fig', 'pear', 'apple', 'banana']Triển khai từng bước
- Sử dụng hàm được sắp xếp() để sắp xếp bản sao của danh sách mà không làm thay đổi dữ liệu gốc.
- Sử dụng phương thức .sort() trực tiếp trên đối tượng danh sách để sửa đổi tại chỗ và tiết kiệm bộ nhớ.
- Truyền Reverse=True làm tham số để sắp xếp các mục theo thứ tự giảm dần.
- Sử dụng key=lambda x: ... để sắp xếp các phần tử dựa trên thuộc tính tùy chỉnh (như độ dài hoặc giá trị lồng nhau).
Câu hỏi thường gặp
Sự khác biệt giữa list.sort() và sắp xếp() là gì?
list.sort() sửa đổi danh sách tại chỗ và trả về Không có, trong khi được sắp xếp() giữ nguyên danh sách ban đầu và trả về một danh sách được sắp xếp mới.
Làm cách nào để sắp xếp danh sách từ điển theo một khóa?
Sử dụng tham số khóa với hàm lambda hoặc operator.itemgetter. Ví dụ: list.sort(key=lambda item: item["age"]).
Chủ đề liên quan
Tìm hiểu cách tìm độ dài của danh sách trong Python bằng hàm len(). Hiểu độ phức tạp về thời gian O(1) và số lần kiểm tra.
Cách xóa danh sách trùng lặp khỏi danh sách trong PythonTìm hiểu cách xóa các bản sao khỏi danh sách bằng Python trong khi duy trì hoặc bỏ qua thứ tự. So sánh các chuyển đổi tập hợp, khóa chính tả và phương thức vòng lặp.
Cách hợp nhất hai danh sách trong PythonTìm hiểu những cách tốt nhất để hợp nhất và kết hợp hai danh sách trong Python. So sánh toán tử cộng, phương thức mở rộng, giải nén danh sách và các tùy chọn chuỗi.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Giải thích về biến và kiểu dữ liệu trong Python
Hiểu các biến Python và các kiểu dữ liệu cốt lõi (chuỗi, số nguyên, số float, boolean). Hướng dẫn đầy đủ cho người mới bắt đầu về gán bộ nhớ trong Python.
Bảng cheat các phương thức danh sách Python
Hướng dẫn tham khảo nhanh về các thao tác với danh sách Python. Nắm vững cách thêm, chèn, xóa, sắp xếp và cắt các phần tử.
Python vs JavaScript: Ngôn ngữ lập trình nào tốt nhất?
So sánh toàn diện giữa Python và JavaScript. Khám phá sự khác biệt về cú pháp, hiệu suất, trường hợp sử dụng (phụ trợ so với giao diện người dùng) và các ví dụ về mã hóa.