Tin tức và phân tích của tất cả các thiết bị di động

Tìm hiểu hàm sắp xếp của Python: Hướng dẫn đơn giản

Một trong những lợi thế lớn nhất của việc sử dụng Python là tính đơn giản của nó. Thật dễ dàng để làm việc vì thư viện tiêu chuẩn của nó chứa nhiều chức năng hữu ích. Một hàm như vậy là hàm sắp xếp.

Hàm này được sử dụng để sắp xếp các lần lặp theo thứ tự nào đó. Nếu không có chức năng như vậy, bạn phải viết mã thực hiện thuật toán sắp xếp, chẳng hạn như Sắp xếp nổi bọt hoặc Sắp xếp chèn. Điều này thường phức tạp, nhưng Python cung cấp một cách đơn giản hơn mà chúng tôi sẽ đề cập trong bài viết này.

Giới thiệu hàm sắp xếp

Hàm được sắp xếp là hàm sắp xếp các lần lặp trong Python. Iterable là bất kỳ giá trị nào có thể được lặp lại. Ví dụ về các lần lặp là chuỗi, danh sách, bộ dữ liệu và bộ. Các phần tử lặp này thường không có thứ tự và việc sắp xếp sẽ đặt các giá trị của chúng theo một thứ tự cụ thể. Việc sắp xếp các giá trị rất hữu ích vì:

  • Tìm kiếm theo giá trị nhanh hơn và hiệu quả hơn bằng cách sử dụng các thuật toán như tìm kiếm nhị phân. Tuy nhiên, tìm kiếm nhị phân yêu cầu các giá trị phải được sắp xếp trước.
  • Để hiển thị các giá trị. Đôi khi người dùng muốn xem thông tin được sắp xếp, ví dụ như theo mức giá thấp nhất hoặc theo bài đăng gần đây nhất. Điều này sẽ yêu cầu một số loại sắp xếp danh sách các giá trị sẽ được triển khai.
  • Khi thực hiện phân tích thống kê, ví dụ để tìm giá trị chung nhất trong một tập hợp. Việc này sẽ dễ thực hiện hơn khi các giá trị được sắp xếp theo thứ tự.

Hướng dẫn sử dụng tính năng được sắp xếp

Như đã đề cập trước đó, hàm được sắp xếp hoạt động với tất cả các lần lặp. Đổi lại, nó trả về một danh sách đã được sắp xếp. Hãy ghi nhớ điều này – mặc dù đầu vào có thể lặp lại bất kỳ lần nào, nhưng giá trị trả về phải luôn là một danh sách.

Cú pháp hàm được sắp xếp

Chữ ký của hàm được sắp xếp như sau:

sorted(iterable, key=None, reverse=False)

Như bạn có thể thấy, đối số duy nhất cần có là đối số có thể lặp lại sẽ được sắp xếp.

Điều quan trọng là đối số sau đây. Chìa khóa là hàm sẽ được sử dụng để biến đổi từng mục trong vòng lặp để lấy giá trị sẽ được sử dụng để sắp xếp. Điều này sẽ hữu ích cho việc sắp xếp danh sách từ điển như bạn sẽ thấy sau này. Giá trị mặc định là không, vì vậy nó sẽ không áp dụng bất kỳ chức năng nào trừ khi được chỉ định.

Đối số cuối cùng là đối số nghịch đảo. Nếu được đặt thành true, các mục sẽ được sắp xếp theo thứ tự ngược lại.

Trong phần tiếp theo, tôi sẽ sử dụng các ví dụ để minh họa cách sử dụng tính năng này.

Ví dụ về việc sử dụng các hàm được sắp xếp

Danh sách số

Trường hợp sắp xếp giá trị đơn giản nhất là sắp xếp danh sách các số. Hãy xem xét ví dụ mã sau:

# A list of unsorted values
numbers = [8, 4, 3, 9, 2, 0, 3]

# Sorting the numbers
sorted_numbers = sorted(numbers)

# Outputting the sorted values
print(sorted_numbers)

Đầu ra sẽ là:

[0, 2, 3, 3, 4, 8, 9]

Như bạn có thể thấy, các giá trị đã được sắp xếp theo thứ tự tăng dần. Bạn sẽ đặt đảo ngược thành true nếu bạn muốn sắp xếp chúng theo thứ tự giảm dần. Vì vậy, bài thơ 4 trong ví dụ mã trước nó sẽ trông như thế này:

sorted_numbers = sorted(numbers, reverse=True)

Đầu ra của chương trình sửa đổi sẽ là:

[9, 8, 4, 3, 3, 2, 0]

Danh sách chuỗi

Hàm sắp xếp xử lý nhiều thứ hơn là chỉ số. Bạn cũng có thể sắp xếp chuỗi. Để sắp xếp các chuỗi trong danh sách, các ký tự đầu tiên của chuỗi sẽ được so sánh. Việc so sánh được thực hiện trên các giá trị ký tự ASCII. Ví dụ: “hello” sẽ xuất hiện trước “world” vì giá trị ASCII của “h” là 104, nhỏ hơn giá trị ASCII của “w”, là 119.

Nếu một hoặc nhiều chuỗi có cùng ký tự đầu tiên thì ký tự thứ hai và các ký tự tiếp theo của chúng sẽ được so sánh cho đến khi xác định được thứ tự. Đây là một ví dụ về mã trong đó chúng tôi sắp xếp tên của mọi người.

# Creating a list of names
members_list = ['bob', 'dave', 'charlie', 'alice']

# Sorting the names
sorted_members_list = sorted(members_list)

# Printing the names
print(sorted_members_list)

Điều này sẽ tạo ra đầu ra sau:

['alice', 'bob', 'charlie', 'dave']

Vì các giá trị ASCII được sử dụng nên thứ tự của các chuỗi phụ thuộc vào ký tự nào xuất hiện đầu tiên trong bảng ASCII. Ví dụ: một chữ cái viết hoa sẽ đứng trước một chữ cái viết thường vì chữ hoa đứng trước chữ thường trong ASCII. Đây là bảng ASCII đầy đủ để bạn tham khảo:

Nguồn: commons.wikimedia.org

Các lần lặp khác – chuỗi, bộ dữ liệu và bộ sưu tập

Như tôi đã đề cập, hàm được sắp xếp hoạt động với nhiều kiểu lặp khác nhau. Các quy tắc tương tự áp dụng cho cách sắp xếp các giá trị trong các lần lặp. Đây là một ví dụ:

# Printing a sorted string
print(sorted("dijkstra"))

# Printing a sorted tuple of values
print(sorted((3, 4, 2, 1, 5, 0)))

# Printing a sorted set of values
print(sorted(set([4, 5, 5, 1, 3, 8, 9])))

Kết quả của việc này sẽ là:

['a', 'd', 'i', 'j', 'k', 'r', 's', 't']
[0, 1, 2, 3, 4, 5]
[1, 3, 4, 5, 8, 9]

Như bạn có thể thấy, kết quả trong mỗi trường hợp là một danh sách.

Danh sách từ điển

Bạn cũng có thể áp dụng chức năng sắp xếp để sắp xếp danh sách từ điển. Tuy nhiên, việc sắp xếp từ điển phức tạp hơn một chút. Điều này là do, không giống như số hoặc chuỗi, từ điển có nhiều thuộc tính, mỗi thuộc tính đều quan trọng như nhau để so sánh.

Vì vậy, để sắp xếp các từ điển, bạn chỉ định một hàm sẽ tóm tắt toàn bộ từ điển thành một giá trị duy nhất dùng để so sánh. Hàm này sẽ được chuyển đến hàm được sắp xếp làm đối số chính. Đây là một ví dụ để minh họa:

people = [
        { 'name': 'Alice', 'age': 27 },
        { 'name': 'Bob', 'age':  23 },
        { 'name': 'Charlie', 'age': 25}
]

people_sorted_by_age = sorted(people, key=lambda person: person['age'])
print(people_sorted_by_age)

Trong ví dụ này, chúng ta có ba người được đại diện bởi một đối tượng từ điển. Mỗi đối tượng có một thuộc tính tên và tuổi. Chúng tôi muốn sắp xếp mọi người theo độ tuổi. Do đó, khi gọi một hàm được sắp xếp, chúng ta chuyển hàm đó làm đối số chính.

Hàm này sẽ lấy một đối tượng từ điển của một người và trả về tuổi của họ. Giá trị được trả về bởi khóa này sẽ được sử dụng để sắp xếp. Vì vậy, toàn bộ từ điển đã được tóm tắt bằng một số nguyên đơn giản có thể so sánh được. Để đơn giản, tôi đã sử dụng hàm lambda để xác định đối số chính.

Chạy mã sẽ hiển thị đầu ra sau:

[{'name': 'Bob', 'age': 23}, {'name': 'Charlie', 'age': 25}, {'name': 'Alice', 'age': 27}]

Trường hợp sử dụng đối số chính

Đối số chính không chỉ cần được sử dụng khi sắp xếp từ điển. Bạn có thể sử dụng nó trên tất cả các giá trị. Công dụng của nó là cung cấp một khóa có thể được sử dụng để sắp xếp các giá trị. Dưới đây là một số trường hợp sử dụng ví dụ:

  • Sắp xếp các giá trị bằng cách xác định hàm khóa nhận một giá trị và trả về độ dài của giá trị.
  • Sắp xếp các chuỗi trong danh sách không phân biệt chữ hoa chữ thường. Để làm điều này, mỗi chuỗi trong danh sách có thể được chuyển đổi thành chữ thường. Điều này có thể đạt được bằng cách xác định hàm khóa nhận giá trị khóa chuỗi và trả về phiên bản chữ thường của chuỗi.
  • Sắp xếp các giá trị dựa trên giá trị tổng hợp kết hợp các giá trị của các mục khác.

Độ phức tạp thời gian chạy của hàm được sắp xếp

Hàm được sắp xếp có độ phức tạp về thời gian là O(n log n), trong đó n là số phần tử trong đầu vào có thể lặp lại. Sự phức tạp này là do hàm sử dụng thuật toán Timsort, đây là thuật toán sắp xếp kết hợp dựa trên sắp xếp hợp nhất và sắp xếp chèn.

Độ phức tạp không gian của hàm là O(n), trong đó n vẫn là số phần tử trong đầu vào. Điều này là do một danh sách mới được tạo và trả về.

Hàm sắp xếp so với hàm sắp xếp

Một tùy chọn khác để sắp xếp các giá trị là chức năng sắp xếp. Phần này giải thích những khác biệt chính giữa các hàm Sắp xếp và Sắp xếp.

  • Hàm sắp xếp sửa đổi iterable tại chỗ trong khi hàm sắp xếp tạo một danh sách mới và trả về nó.
  • Vì các sửa đổi được thực hiện tại chỗ nên việc sắp xếp yêu cầu đầu vào phải là một danh sách. Mặt khác, được sắp xếp có thể lấy bất kỳ đầu vào lặp lại nào, sau đó sẽ được sử dụng để tạo danh sách mới sẽ được sửa đổi và trả về.

những từ cuối

Trong bài viết này, chúng ta đã tìm hiểu về hàm được sắp xếp – nó là gì, cách sử dụng và các đối số khác nhau của nó. Chúng tôi cũng đề cập đến nhiều ví dụ sử dụng khác nhau của hàm và độ phức tạp trong thời gian chạy của nó, đồng thời so sánh nó với hàm sắp xếp.

Sau đó, bạn có thể đọc bài viết của chúng tôi về hàm tính tổng trong Python.

Mục lục