Hàm sorted() trong Python
Hàm sorted() trong Python sắp xếp các phần tử của một đối tượng theo thứ tự nhất định (tăng dần hoặc giảm dần) và trả về đối tượng dưới dạng danh sách đã sắp xếp. Cú pháp của hàm sorted() sorted(đối tượng, key=None, reverse=False) Tham số của hàm sorted() sorted() có thể có tối đa 3 thông ...
Hàm sorted() trong Python sắp xếp các phần tử của một đối tượng theo thứ tự nhất định (tăng dần hoặc giảm dần) và trả về đối tượng dưới dạng danh sách đã sắp xếp.
Cú pháp của hàm sorted()
sorted(đối tượng, key=None, reverse=False)
Tham số của hàm sorted()
sorted() có thể có tối đa 3 thông số:
- Đối tượng: Mỗi chuỗi (string, tuple, list) hoặc một bộ sưu tập (set, dictionary, frozen set) hoặc bất kỳ đối tượng iterator nào.
- reverse (tùy chọn): Nếu giá trị là True, danh sách sẽ được sắp xếp theo kiểu đảo ngược (hoặc giảm dần). Nếu không được khai báo, giá trị mặc định là False.
- key (tùy chọn): Nếu có, hàm sorted() so sánh giá trị với key sau đó sắp xếp. Giá trị mặc định là None.
Ví dụ 1: Sắp xếp string, lish và tuble
Mời các bạn xem đoạn code sau:
# Sắp xếp list py_list = ['q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g'] print(sorted(py_list)) # Sắp xếp string py_string = 'Quantrimang' print(sorted(py_string)) # Sắp xếp tuple py_tuple = ('q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g') print(sorted(py_tuple))
Khi chạy chương trình kết quả thu được là:
['a', 'a', 'g', 'i', 'm', 'n', 'n', 'q', 'r', 't', 'u'] ['Q', 'a', 'a', 'g', 'i', 'm', 'n', 'n', 'r', 't', 'u'] ['a', 'a', 'g', 'i', 'm', 'n', 'n', 'q', 'r', 't', 'u']
Chú ý: Một list cũng có hàm sort() hoạt động tương tự hàm sorted(). Khác biệt duy nhất đó là hàm sort() không trả về bất kỳ giá trị nào và thay đổi danh sách ban đầu.
Ví dụ 2: Sắp xếp theo thứ tự giảm dần
Hàm sorted() có tham số đảo ngược và khi bạn đặt reverse=True, danh sách sẽ được sắp xếp theo thứ tự giảm dần.
Hãy xem xét những dòng code sau:
# Sắp xếp set py_set = {'q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g'} print(sorted(py_set, reverse=True)) # Sắp xếp dictionary py_dict = {'e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5} print(sorted(py_dict, reverse=True)) # Sắp xếp frozen set frozen_set = frozenset(('q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g')) print(sorted(frozen_set, reverse=True))
Khi chạy chương trình, kết quả trả về là:
['u', 't', 'r', 'q', 'n', 'm', 'i', 'g', 'a'] ['u', 'o', 'i', 'e', 'a'] ['u', 't', 'r', 'q', 'n', 'm', 'i', 'g', 'a']
Tham số key của hàm sorted() trong Python
Nếu bạn muốn sắp xếp theo kiểu riêng của mình, hàm sorted() cũng chấp nhận việc lấy một key làm tham số tùy chọn.
Bạn có thể sắp xếp đối tượng dựa trên giá trị được trả về của key. Ví dụ:
sorted(iterable, key=len)
Ở đây, len() là một hàm tích hợp sẵn của Python với nhiệm vụ đếm chiều dài của một đối tượng.
Danh sách được sắp xếp dựa trên độ dài của phần tử, từ số thấp nhất đến cao nhất.
Ví dụ 3: Sắp xếp một list bằng hàm sorted() có chứa key
Mời các bạn xem đoạn code:
# Xắp xếp dựa trên phần tử thứ 2 def take_second(elem): return elem[1] # list ngẫu nhiên random = [(2, 2), (3, 4), (4, 1), (1, 3)] # sắp xếp list với key sorted_list = sorted(random, key=take_second) # hiển thị list print('List đã được sắp xếp:', sorted_list)
Sau khi chạy chương trình, kết quả thu được là
List đã được sắp: [(4, 1), (2, 2), (1, 3), (3, 4)]
Ví dụ 4: Sắp xếp với nhiều key
Ban đầu chúng ta có một danh sách như sau:
# List kết quả thi học kỳ của các sinh viên # Các thành phần của list: (Tên sinh viên, Điểm số đạt được theo thang 100, Tuổi) participant_list = [ ('Lê An', 50, 18), ('Trần Bình', 75, 12), ('Trần Tâm', 75, 20), ('Thanh Lam', 90, 22), ('Vũ Lan', 45, 12) ]
Bây giờ chúng ta cần sắp xếp list sinh viên theo điểm số từ cao xuống thấp. Trong trường hợp này, nếu sinh viên có cùng điểm số thì sinh viên nhỏ tuổi hơn sẽ được xếp ở vị trí phía trước.
Chúng ta có thể làm được điều này với hàm sorted() nhiều key bằng cách đưa các con số về dạng tuple.
Hai tuple có thể được so sánh bằng cách so sánh các yếu tố từ đầu đến cuối. Nếu có một yếu tố bằng nhau, yếu tố thứ hai sẽ được so sánh... tiếp tục cho tới hết.
>>> (1,3) > (1, 4) False >>> (1, 4) < (2,2) True >>> (1, 4, 1) < (2, 1) True
Dùng cách xử lý này, chúng ta có thể xây dựng đoạn code so sánh như sau:
# List kết quả thi học kỳ của các sinh viên # Các thành phần của list: (Tên sinh viên, Điểm số đạt được theo thang 100, Tuổi) participant_list = [ ('Lê An', 50, 18), ('Trần Bình', 75, 12), ('Trần Tâm', 75, 20), ('Thanh Lam', 90, 22), ('Vũ Lan', 45, 12) ] def sorter(item): error = 100 - item[1] age = item[2] return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)
Khi chạy chương trình, kết quả thu được là:
[('Thanh Lam', 90, 22), ('Trần Bình', 75, 12), ('Trần Tâm', 75, 20), ('Lê An', 50, 18), ('Vũ Lan', 45, 12)
Do hàm sắp xếp ngắn và chỉ cần một dòng nên hàm lambda được sử dụng bên trong key thay vì chuyển ra ngoài thành hàm riêng.
Đoạn code trên có thể viết lại bằng hàm lambda theo cách sau:
# List kết quả thi học kỳ của các sinh viên # Các thành phần của list: (Tên sinh viên, Điểm số đạt được theo thang 100, Tuổi) participant_list = [ ('Lê An', 50, 18), ('Trần Bình', 75, 12), ('Trần Tâm', 75, 20), ('Thanh Lam', 90, 22), ('Vũ Lan', 45, 12) ] sorted_list = sorted(participant_list, key=lambda item: (100-item[1], item[2])) print(sorted_list)
Kết quả thu được vẫn là:
[('Thanh Lam', 90, 22), ('Trần Bình', 75, 12), ('Trần Tâm', 75, 20), ('Lê An', 50, 18), ('Vũ Lan', 45, 12)
Chúc các bạn sớm quen với hàm sorted() trong Python và đừng quên truy cập trang web dưới đây để học thêm các hàm Python hữu ích khác.
- Các hàm Python tích hợp sẵn