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.

Hãy thử Giải pháp này trong Trình chỉnh sửa

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)
Đầu ra thiết bị đầu cuối
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à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.