Trong Python, việc sắp xếp các phần tử trong một danh sách (list) là một tác vụ phổ biến và quan trọng. Python cung cấp hai hàm chính để thực hiện việc này: sorted()
và sort()
. Cả hai hàm đều cho phép bạn sắp xếp các phần tử theo thứ tự tăng dần hoặc giảm dần, nhưng có một số khác biệt quan trọng cần lưu ý. Trong phần này, chúng ta sẽ tìm hiểu cách sử dụng hai hàm này và các ví dụ minh họa.
Hàm sorted()
Hàm sorted()
được sử dụng để tạo ra một danh sách mới với các phần tử được sắp xếp từ danh sách ban đầu. Danh sách gốc không bị thay đổi.
Cú pháp:
python
sorted(iterable, key=None, reverse=False)
iterable
: Đối tượng lặp lại (như list, tuple, dict, set, ...) cần được sắp xếp.key
(tùy chọn): Hàm hoặc lambda được sử dụng để trích xuất khóa so sánh từ mỗi phần tử trongiterable
.reverse
(tùy chọn): NếuTrue
, kết quả sẽ được sắp xếp theo thứ tự giảm dần.
Ví dụ:
python
# Sắp xếp list số theo thứ tự tăng dần
numbers = [5, 2, 8, 1, 9]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # Output: [1, 2, 5, 8, 9]
# Sắp xếp list chuỗi theo thứ tự giảm dần
fruits = ['apple', 'banana', 'cherry', 'date']
sorted_fruits = sorted(fruits, reverse=True)
print(sorted_fruits) # Output: ['date', 'cherry', 'banana', 'apple']
# Sắp xếp list tuple theo chiều dài tăng dần
tuples = [(1, 3), (4, 2), (2, 1), (3, 4)]
sorted_tuples = sorted(tuples, key=lambda x: len(x))
print(sorted_tuples) # Output: [(2, 1), (1, 3), (4, 2), (3, 4)]
Phương thức sort()
Phương thức sort()
được sử dụng để sắp xếp các phần tử trong chính danh sách ban đầu. Danh sách gốc sẽ bị thay đổi sau khi sắp xếp.
Cú pháp:
python
list.sort(key=None, reverse=False)
key
(tùy chọn): Hàm hoặc lambda được sử dụng để trích xuất khóa so sánh từ mỗi phần tử trong danh sách.reverse
(tùy chọn): NếuTrue
, danh sách sẽ được sắp xếp theo thứ tự giảm dần.
Ví dụ:
python
# Sắp xếp list số theo thứ tự tăng dần
numbers = [5, 2, 8, 1, 9]
numbers.sort()
print(numbers) # Output: [1, 2, 5, 8, 9]
# Sắp xếp list chuỗi theo thứ tự giảm dần
fruits = ['apple', 'banana', 'cherry', 'date']
fruits.sort(reverse=True)
print(fruits) # Output: ['date', 'cherry', 'banana', 'apple']
# Sắp xếp list dict theo giá trị tăng dần
people = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}, {'name': 'Charlie', 'age': 20}]
people.sort(key=lambda x: x['age'])
print(people) # Output: [{'name': 'Charlie', 'age': 20}, {'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]
Khác biệt giữa sorted() và sort()
Mặc dù cả hai hàm sorted()
và sort()
đều được sử dụng để sắp xếp các phần tử, nhưng chúng có một số khác biệt quan trọng:
- Tác động lên danh sách gốc:
sorted()
tạo ra một danh sách mới với các phần tử được sắp xếp, trong khisort()
sắp xếp trực tiếp trên danh sách gốc. - Kiểu trả về:
sorted()
trả về một danh sách mới đã được sắp xếp, trong khisort()
không trả về giá trị nào (trả vềNone
). - Đối tượng có thể sắp xếp:
sorted()
có thể sắp xếp bất kỳ đối tượng lặp lại nào (như list, tuple, dict, set, ...), trong khisort()
chỉ có thể sắp xếp các đối tượnglist
. - Hiệu suất: Trong hầu hết các trường hợp,
sort()
sẽ nhanh hơnsorted()
vì nó không cần tạo ra một danh sách mới.
Nói chung, nếu bạn muốn sắp xếp một danh sách mà không cần tạo ra một danh sách mới, hãy sử dụng sort()
. Ngược lại, nếu bạn muốn giữ nguyên danh sách gốc và tạo ra một danh sách mới với các phần tử được sắp xếp, hãy sử dụng sorted()
.
Kết luận
Trong Python, sorted()
và sort()
là hai hàm quan trọng để sắp xếp các phần tử trong danh sách. Mặc dù chúng có chức năng tương tự, nhưng có một số khác biệt quan trọng cần lưu ý. Bằng cách hiểu rõ cách sử dụng và khác biệt giữa hai hàm này, bạn có thể lựa chọn và sử dụng chúng một cách hiệu quả trong các dự án của mình.