Hàm sorted() trong Python

Hàm sorted trong Python dùng để làm gì? Dưới đây là mọi điều bạn cần biết về hàm sắp xếp trong Python.

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.
Hàm sorted() trong Python được dùng để sắp xếp các phần tử trong đối tượng
Hàm sorted() trong Python được dùng để sắp xếp các phần tử trong đối tượng

Ưu điểm của hàm sorted() trong Python

  • Dễ sử dụng: Hàm sorted rất dễ sử dụng. Nó chỉ cần một tham số bắt buộc, có thể lặp lại và các tham số khác bao gồm key và reverse, có thể được dùng để tùy biến phân loại.
  • Tính bất biến: Hàm sorted trong Python tạo một danh sách được sắp xếp mới không thay đổi chuỗi đã truyền. Tính năng này có thể hữu ích khi chúng ta muốn dữ liệu được sắp xếp và không ảnh hưởng đến dữ liệu gốc.
  • Tùy biến phân loại: Tham số key có thể được dùng để đặt tiêu chí phân loại. Bằng cách dùng tính năng này, bạn dễ dàng tùy chỉnh quá trình phân loại. Ngoài ra, lập trình viên còn có thể sử dụng tham số reverse để sắp xếp ngược thứ tự dữ liệu.

Ứng dụng của hàm sorted() trong Python:

  • Phân tích dữ liệu giúp người dùng dễ dàng tạo báo cáo tổng quan.
  • Tùy biến phân loại theo tiêu chí cụ thể.
  • Hiển thị kết quả theo cách thức phân loại cụ thể.

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.

Thứ Ba, 08/08/2023 16:51
4,69 👨 36.288
1 Bình luận
Sắp xếp theo
  • TIÊN HUỲNH VĂN
    TIÊN HUỲNH VĂN

    Xin chào . mình bị gặp trường hợp sắp xếp như thế này thì phải làm sao để nó sắp xếp lại theo thứ tự số ạ

    list1 = ['1 java', '2 python', '11 c++', '12 php', 'sql']

    list1.sort()

    print ("List1 duoc sap xep: ", list1)

    kết quả

    List1 duoc sap xep: ['1 java', '11 c++', '12 php', '2 python', 'sql']

    kết quả mong muốn ['1 java', '2 python, '11 c++', '12 php'', 'sql']

    xin cảm ơn

    Thích Phản hồi 07/03/21
    ❖ Python