1. Tổng quan về hàm sorted()sort()

Python cung cấp hai cách để sắp xếp các phần tử của một danh sách hoặc chuỗi phần tử: hàm sorted() và phương thức sort(). Cả hai đều được sử dụng để sắp xếp các phần tử, nhưng chúng khác nhau ở một vài khía cạnh quan trọng.

  • sorted(): Là một hàm tích hợp của Python có thể sắp xếp bất kỳ iterable (chuỗi, danh sách, tuple, v.v.), trả về một danh sách mới chứa các phần tử đã được sắp xếp mà không làm thay đổi danh sách ban đầu.
  • sort(): Là phương thức của đối tượng kiểu danh sách (list) và chỉ có thể áp dụng cho danh sách. Nó sắp xếp danh sách tại chỗ, tức là thay đổi danh sách ban đầu mà không tạo ra một bản sao.

2. Sử dụng hàm sorted()

2.1. Cú pháp

sorted(iterable, key=None, reverse=False)
  • iterable: Đối tượng có thể lặp lại được (như danh sách, tuple, chuỗi, v.v.).
  • key (tùy chọn): Hàm được sử dụng để xác định tiêu chí sắp xếp. Mặc định là None.
  • reverse (tùy chọn): Nếu True, danh sách sẽ được sắp xếp theo thứ tự giảm dần. Mặc định là False.

2.2. Ví dụ cơ bản

# Sắp xếp một danh sách số nguyên
numbers = [5, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # Kết quả: [1, 2, 5, 5, 6, 9]

# Danh sách ban đầu không thay đổi
print(numbers)  # Kết quả: [5, 2, 9, 1, 5, 6]

2.3. Sắp xếp theo thứ tự giảm dần

Sử dụng tham số reverse=True để sắp xếp theo thứ tự giảm dần.

numbers = [5, 2, 9, 1, 5, 6]
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)  # Kết quả: [9, 6, 5, 5, 2, 1]

2.4. Sắp xếp với hàm key

Tham số key cho phép bạn chỉ định một hàm để sắp xếp các phần tử dựa trên tiêu chí tùy chỉnh.

# Sắp xếp danh sách chuỗi theo độ dài
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words)  # Kết quả: ['date', 'apple', 'banana', 'cherry']

2.5. Sắp xếp tuple

Hàm sorted() cũng có thể sắp xếp các phần tử của một tuple.

tuple_data = (3, 1, 2)
sorted_tuple = sorted(tuple_data)
print(sorted_tuple)  # Kết quả: [1, 2, 3]

3. Sử dụng phương thức sort()

3.1. Cú pháp

list.sort(key=None, reverse=False)
  • keyreverse hoạt động tương tự như trong hàm sorted().
  • Phương thức này chỉ áp dụng cho đối tượng danh sách (list) và không trả về danh sách mới mà thay đổi trực tiếp danh sách ban đầu.

3.2. Ví dụ cơ bản

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # Kết quả: [1, 2, 5, 5, 6, 9]

3.3. Sắp xếp theo thứ tự giảm dần

Sử dụng tham số reverse=True để sắp xếp danh sách theo thứ tự giảm dần.

numbers = [5, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers)  # Kết quả: [9, 6, 5, 5, 2, 1]

3.4. Sắp xếp với hàm key

# Sắp xếp danh sách chuỗi theo độ dài
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words)  # Kết quả: ['date', 'apple', 'banana', 'cherry']

4. Sự khác nhau giữa sorted()sort()

Đặc điểmsorted()sort()
Đối tượngBất kỳ iterable nàoChỉ áp dụng cho danh sách (list)
Thay đổi danh sách gốcKhông, tạo ra danh sách mớiCó, sắp xếp tại chỗ
Kết quả trả vềDanh sách đã sắp xếp mớiNone (danh sách ban đầu bị thay đổi)
Khả năng sử dụngĐa dụng hơn, có thể dùng với tuple, chuỗi, v.v.Chỉ dùng được cho danh sách

5. Khi nào nên dùng sorted() hay sort()?

  • Sử dụng sorted() khi bạn không muốn làm thay đổi danh sách ban đầu hoặc khi cần sắp xếp các kiểu iterable khác ngoài danh sách.
  • Sử dụng sort() khi bạn chỉ cần sắp xếp danh sách và không quan tâm đến việc thay đổi danh sách ban đầu.

6. Kết luận

Cả sorted()sort() đều là những công cụ mạnh mẽ trong Python để sắp xếp dữ liệu. Nếu bạn muốn giữ nguyên dữ liệu gốc, sorted() là lựa chọn tốt hơn. Nếu bạn muốn sắp xếp trực tiếp và tiết kiệm bộ nhớ, hãy sử dụng sort().