Python Danh sách sắp xếp() với các ví dụ

⚡ Tóm tắt thông minh

Python Hàm `list sort()` sắp xếp các phần tử của một danh sách tại chỗ, theo thứ tự tăng dần theo mặc định hoặc giảm dần thông qua tham số `reverse`, trong khi hàm `key` tùy chọn sắp xếp theo các tiêu chí tùy chỉnh như độ dài, trường tuple hoặc các hàm do người dùng định nghĩa.

  • 🔘 Cú pháp: Phương thức sort() chấp nhận các tham số tùy chọn key và reverse và sửa đổi danh sách gốc mà không tạo bản sao.
  • ☑️ Kiểm soát đơn hàng: Việc đặt tham số `reverse` thành `True` sẽ sắp xếp các giá trị từ cao nhất đến thấp nhất thay vì thứ tự tăng dần mặc định.
  • Tham số chính: Một hàm quan trọng như `len` dùng để sắp xếp các phần tử theo một giá trị được suy ra, ví dụ như độ dài chuỗi hoặc trường trong bộ dữ liệu.
  • 🧪 sắp xếp so với đã sắp xếp: Phương thức sort() thay đổi danh sách tại chỗ và trả về None, trong khi sorted() trả về một danh sách mới và giữ nguyên danh sách ban đầu.
  • 🛠️ Tiêu chí tùy chỉnh: Biểu thức lambda và các hàm do người dùng định nghĩa cho phép hàm sort() sắp xếp các bộ dữ liệu, từ điển và bộ dữ liệu có tên theo bất kỳ thuộc tính nào được chọn.
  • 🤖 Quy trình làm việc của AI: Các quy trình học máy sắp xếp các dự đoán theo điểm số và chọn ra các kết quả hàng đầu trước khi xếp hạng hoặc đánh giá.

Python Sắp xếp danh sách()

Phương thức sắp xếp () trong Python?

Hàm sort() trong Python Hàm này giúp sắp xếp một danh sách theo thứ tự tăng dần hoặc giảm dần. Nó có thể được sử dụng để sắp xếp danh sách số, bộ dữ liệu (tuple) và danh sách chuỗi. Hàm này không tạo ra một danh sách riêng biệt mà chỉ sửa đổi hoặc sắp xếp danh sách gốc.

Cú pháp của phương thức Sort trong Python

Hàm sắp xếp có cú pháp như sau:

List.sort(key=…, reverse=…)

Hàm sắp xếp có hai tham số tùy chọn, đó là:

  • Phím: - Dùng để sắp xếp hàm dựa trên tiêu chí sắp xếp.
  • Reverse: – Tham số này nhận giá trị là true hoặc false. Nếu là true, hàm tùy chỉnh này sẽ sắp xếp danh sách theo thứ tự giảm dần.

Sắp xếp danh sách theo thứ tự tăng dần bằng phương pháp Sort trong Python

In Python, theo mặc định, hàm sắp xếp sẽ sắp xếp bất kỳ danh sách nào theo thứ tự tăng dần. Danh sách theo thứ tự tăng dần có giá trị thấp nhất ở phía bên trái và giá trị cao nhất nằm ở phía bên phải.

Ví dụ:

Python mã:

base_list=["Google","Reliance","Guru99","Content","Syntax"]
base_list.sort()
print("the base list after sorting is",base_list)

Đầu ra:

the base list after sorting is ['Content', 'Google', 'Guru99', 'Reliance', 'Syntax']

Code Giải thích:

  • Danh sách trên là danh sách chuỗi được xác định ngẫu nhiên.
  • Chức năng sắp xếp của Python giúp sắp xếp danh sách ngẫu nhiên theo thứ tự tăng dần, với độ dài từ thấp nhất ở phía bên trái và độ dài cao nhất của từ ở phía bên phải.

Sắp xếp danh sách theo thứ tự giảm dần

Chức năng sắp xếp cũng cho phép sắp xếp danh sách theo thứ tự giảm dần. Nó có thể được định nghĩa là thứ tự trong đó danh sách bắt đầu với giá trị cao nhất và kết thúc bằng giá trị thấp nhất.

Tham số đảo ngược của hàm sắp xếp được gán là true để sắp xếp danh sách theo thứ tự giảm dần.

Hãy xem ví dụ dưới đây:

Python mã:

base_list=[100,600,400,8000,50]
base_list.sort()
print("the base list after sorting is",base_list)
# Reverse Order
base_list.sort(reverse=True)
print("the base list after REVERSE sorting is",base_list)

Đầu ra:

the base list after sorting is [50, 100, 400, 600, 8000]
the base list after REVERSE sorting is [8000, 600, 400, 100, 50]

Lưu ý: Đảm bảo rằng việc gán từ “Đúng” cho tham số ngược bắt đầu bằng chữ hoa “T” để tránh mọi lỗi về thời gian chạy.

Sắp xếp danh sách các bộ dữ liệu bằng phương pháp Sắp xếp trong Python

Python bộ dữ liệu là tập hợp các phần tử bất biến tuân theo một trình tự có thứ tự. PythonChức năng sắp xếp của có thể được sử dụng để sắp xếp danh sách các bộ dữ liệu bằng cách sử dụng hàm tùy chỉnh và biểu thức lambda.

Bạn có thể tạo một hàm tùy chỉnh mà không cần tên và biểu diễn nó bằng một biểu thức lambda. Cú pháp của biểu thức Lambda như sau:

Cú pháp:

Lambda arguments: expression

Cú pháp trên tương đương với mã python bên dưới:

def name (arguments):
return expression

Dưới đây là một ví dụ về bộ dữ liệu (tuple) và hàm tùy chỉnh để minh họa cách hàm sắp xếp với các tham số khóa giúp sắp xếp các phần tử trong bộ dữ liệu:

Python mã:

base_list = [('Alto', 2020, 500),('MSFT', 2022, 300),('Guru99', 2019, 1070)]
def get_key(base_list):
    return base_list[2]
base_list.sort(key=get_key,reverse=True)
print("The change in base list is as follows",base_list)

Đầu ra:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Code Giải thích:

  • Tham số ngược được định nghĩa là true để sắp xếp bộ dữ liệu theo thứ tự giảm dần.
  • Hàm tùy chỉnh lấy phần tử thứ hai của bộ dữ liệu.
  • Điều này được sử dụng làm khóa của hàm sắp xếp.

Chúng ta hãy xem ví dụ dưới đây sử dụng biểu thức lambda:

Python mã:

base_list = [('Alto', 2020, 500),
('MSFT', 2022, 300),
('Guru99', 2019, 1070)]
base_list.sort(key=lambda base_list:base_list[2],reverse=True)
print("The change in base list is as follows",base_list)

Đầu ra:

The change in the base list is as follows [('Guru99', 2019, 1070), ('Alto', 2020, 500), ('MSFT', 2022, 300)]

Giải thích:

  • Biểu thức lambda giúp bạn sắp xếp các phần tử của bộ dữ liệu từ cao xuống thấp với khóa là phần tử thứ hai của bộ dữ liệu.
  • Chương trình sẽ kiểm tra giá trị cao nhất của phần tử thứ hai trong bộ.

Sắp xếp các mục danh sách bằng Len làm tham số chính

Len là một hàm tích hợp sẵn dùng để xác định độ dài của phần tử. Độ dài được xác định có thể được sử dụng để lập chỉ mục trong hàm sắp xếp. Để làm điều này, chúng ta gán Len cho... Python tham số chính của hàm sắp xếp.

Sau đây Python đoạn mã minh họa cách sử dụng hàm Len với hàm sắp xếp.

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len)
print("The sorted list based on length:",base_list)

Đầu ra:

The sorted list based on length: ['Alto', 'Java', 'Guru99', 'Python', 'Google']

Code Giải thích:

Sắp xếp các mục trong danh sách bằng Len

  • Độ dài của phần tử trở thành chỉ số cho tham số key để sắp xếp danh sách theo thứ tự tăng dần.
  • Hàm Len ước tính độ dài của từng phần tử có trong danh sách cơ sở.
  • Nó giữ phần tử ngắn nhất ở phía bên trái và phần tử lớn nhất ở phía bên phải.
  • Ở đây, các từ "alto" và "java" có độ dài là 4, được sắp xếp đầu tiên trong danh sách, tiếp theo là... Guru99, có chiều dài là 6.

Ví dụ này minh họa khái niệm tham số đảo ngược trong hàm sắp xếp như hình bên dưới:

Python Code:

base_list=["Alto", "Guru99", "Python", "Google", "Java"]
base_list.sort(key=len,reverse=True)
print("The sorted list based on length:",base_list)

Đầu ra:

The sorted list based on length: ['Guru99', 'Python', 'Google', 'Alto', 'Java']

Sắp xếp các mục danh sách bằng hàm do người dùng xác định làm tham số chính

Bạn cũng có thể sử dụng một hàm do người dùng định nghĩa làm tham số chính để sắp xếp một danh sách. Sau đây là một ví dụ:

Python Code:

base_list = [{'Example':'Python','year':1991},{'Example':'Alto','year':2014},{'Example':'Guru99', 'year':1995},
{'Example':'Google','year':1985},{'Example':'Apple','year':2007},{'Example':'Emails','year':2010},]
def get_year(element):
    return element['year']
base_list.sort(key=get_year)
print("The base list after sorting using explicit criteria",base_list)

Đầu ra:

The base list after sorting using explicit criteria [{'Example': 'Google', 'year': 1985}, {'Example': 'Python', 'year': 1991}, {'Example': 'Guru99', 'year': 1995}, {'Example': 'Apple', 'year': 2007}, {'Example': 'Emails', 'year': 2010}, {'Example': 'Alto', 'year': 2014}]

Code Giải thích:

  • Một hàm do người dùng định nghĩa được tạo để trả về năm
  • Tham số chính lấy hàm do người dùng xác định làm tiêu chí.
  • Hàm Sort sẽ sắp xếp danh sách theo thứ tự tăng dần dựa trên giá trị của phần tử “year”.

Sự khác biệt giữa phương thức sắp xếp và phương thức sắp xếp trong Python

Sau khi xem xét các ví dụ trên, việc so sánh trực tiếp hai công cụ sắp xếp sẽ rất hữu ích. Trước khi tóm tắt những điểm khác biệt, chúng ta hãy cùng tìm hiểu cú pháp của phương thức Sorted.

Python Cú pháp:

sorted (list_name, reverse=…., key=..)

Code Giải thích:

  • Hàm sắp xếp sắp xếp danh sách theo thứ tự tăng dần hoặc thứ tự giảm dần.
  • Hàm chấp nhận ba tham số, trong đó hai tham số thuộc loại tùy chọn và một tham số thuộc loại bắt buộc.
  • Tham số list_name là bắt buộc khi sử dụng phương thức Sorted.
  • Phương thức Sorted có thể lấy bất kỳ loại danh sách lặp lại nào làm đầu vào.
  • Các tham số chính và tham số ngược là các tham số tùy chọn theo phương pháp được sắp xếp trong Python.

Đây là một ví dụ về cách sử dụng hàm sắp xếp và sắp xếp trong Python:

Python mã:

#Use of the Sorted method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=sorted(Base_list)
print("the New list using sorted method is",New_list)
#Use of the Sort method
Base_list=[11,10,9,8,7,6]
print("the original list is",Base_list)
New_list=Base_list.sort()
print("the New list using sort method is",New_list)

Đầu ra:

the original list is [11, 10, 9, 8, 7, 6]
the new list using the sorted method is [6, 7, 8, 9, 10, 11]
the original list is [11, 10, 9, 8, 7, 6]
the new list using the sort method is None

Code Giải thích:

  • Danh sách ban đầu được truyền dưới dạng tham số bắt buộc cho hàm được sắp xếp.
  • Phương thức Sorted trả về một danh sách mới bên cạnh danh sách ban đầu.
  • Vì không có tham số bổ sung nào được truyền cho phương thức đã sắp xếp nên danh sách mới theo mặc định được sắp xếp theo thứ tự tăng dần.
  • Chức năng sắp xếp không tạo ra bất kỳ danh sách mới nào.

Dưới đây là những điểm tương đồng và khác biệt chính:

Chức năng sắp xếp Chức năng sắp xếp
Chức năng sắp xếp trong Python là một hàm tích hợp lấy list_name làm tham số bắt buộc. Hàm sắp xếp không lấy danh sách gốc làm tham số.
Phương thức đã sắp xếp trả về một danh sách mới Hàm sắp xếp không trả về danh sách mới
Hàm sắp xếp nên được sử dụng cho danh sách lặp lại Hàm sắp xếp nên được sử dụng cho các danh sách không thể lặp lại.
Nó không sửa đổi danh sách gốc và cho phép chúng tôi giữ lại dữ liệu gốc. Hàm sắp xếp sửa đổi hàm ban đầu và do đó chiếm ít dung lượng bộ nhớ hơn

Khi nào nên sử dụng phương pháp sắp xếp hoặc phương pháp sắp xếp?

Chúng ta hãy lấy một ví dụ yêu cầu sắp xếp dữ liệu cuộc đua. Chương trình sử dụng số yếm và thời gian tính bằng giây để hoàn thành cuộc đua.

Python mã:

from collections import namedtuple
Base = namedtuple('Runner', 'bibnumber duration')
blist = []
blist.append(Base('8567', 1500))
blist.append(Base('5234', 1420))
blist.append(Base('2344', 1600))
blist.append(Base('2342', 1490))
blist.append(Base('23444', 1620))
blist.append(Base('6674', 1906))
print("original list",blist)
blist.sort(key=lambda x: getattr(x, 'duration'))
top_five_result = blist[:5]
print("Results using sort function",top_five_result)
r_blist=sorted(blist,key=lambda x: getattr(x, 'duration'))
top_five_result = r_blist[:5]
print("Results using sorted function",top_five_result)

Đầu ra:

original list [Runner(bibnumber='8567', duration=1500), Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='23444', duration=1620), Runner(bibnumber='6674', duration=1906)]

Results using sort function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Results using sorted function [Runner(bibnumber='5234', duration=1420), Runner(bibnumber='2342', duration=1490), Runner(bibnumber='8567', duration=1500), Runner(bibnumber='2344', duration=1600), Runner(bibnumber='23444', duration=1620)]

Code Giải thích:

  • Danh sách cơ sở được sắp xếp bằng cả hàm sắp xếp và hàm sắp xếp.
  • Danh sách cơ sở sẽ bị mất khi áp dụng chức năng sắp xếp.
  • Không nên áp dụng chức năng sắp xếp cho tập dữ liệu gốc. Nó nên được sử dụng khi có phiên bản sao chép của tập dữ liệu gốc.
  • Hàm Sorted giữ lại danh sách ban đầu. Nó không ghi đè lên nó.
  • Điều này mang lại lợi ích tốt hơn tracKhả năng và quản lý dữ liệu hiệu quả.

Câu Hỏi Thường Gặp

Truyền `key=str.lower` cho phương thức `sort()`, ví dụ: `names.sort(key=str.lower)`. Mỗi chuỗi được so sánh ở dạng chữ thường, vì vậy 'Apple' và 'banana' được sắp xếp theo thứ tự bảng chữ cái bất kể chữ hoa hay chữ thường. Kiểu chữ hoa/chữ thường ban đầu của mỗi phần tử được giữ nguyên trong danh sách đã được sắp xếp cuối cùng.

Việc sắp xếp một danh sách toàn số hoặc toàn chuỗi thì hoạt động bình thường, nhưng việc trộn lẫn các kiểu dữ liệu không liên quan như số nguyên và chuỗi sẽ gây ra lỗi TypeError, bởi vì Python Không thể so sánh chúng. Trước tiên, hãy chuyển đổi các giá trị sang một kiểu dữ liệu có thể so sánh được, hoặc truyền vào một hàm trả về các khóa có thể so sánh được.

Python Trước đây, trình thông dịch sử dụng Timsort, một thuật toán lai giữa sắp xếp trộn và sắp xếp chèn. Từ phiên bản 3.11 trở đi, trình thông dịch sử dụng Powersort, một biến thể phái sinh từ Timsort với chính sách trộn thông minh hơn. Cả hai đều ổn định và chạy trong thời gian O(n log n) trong trường hợp xấu nhất.

Đúng vậy. Phương thức sort() có tính ổn định, vì vậy các phần tử so sánh bằng nhau sẽ giữ nguyên thứ tự tương đối ban đầu. Điều này cho phép bạn sắp xếp theo nhiều tiêu chí theo từng giai đoạn, sắp xếp theo khóa ít quan trọng nhất trước và khóa quan trọng nhất sau cùng.

Phương thức sort() chạy trong thời gian O(n log n) trong trường hợp xấu nhất và trung bình. Trên dữ liệu đã được sắp xếp phần lớn, nó tiến gần đến O(n), bởi vì thuật toán cơ bản phát hiện và sử dụng lại các đoạn đã được sắp xếp sẵn thay vì sắp xếp lại chúng.

Truyền một khóa để chuyển đổi từng mục trong quá trình so sánh, ví dụ: `nums.sort(key=int)`. Danh sách sau đó được sắp xếp theo giá trị số chứ không phải theo ký tự, vì vậy '10' được sắp xếp chính xác sau '9'. Các phần tử được lưu trữ vẫn ở dạng chuỗi; chỉ có phép so sánh sử dụng giá trị số nguyên của chúng.

Việc sắp xếp (sorting) bố trí các dự đoán theo điểm số hoặc xác suất, chọn ra k kết quả hàng đầu trong các hệ thống xếp hạng và đề xuất, và sắp xếp các bản ghi trong quá trình chuẩn bị dữ liệu. Các quy trình học máy thường xuyên sắp xếp các giá trị thuộc tính hoặc đầu ra của mô hình trước khi đánh giá, vì vậy phương thức sort() tích hợp sẵn là một bước tiền xử lý phổ biến.

Đúng vậy. GitHub Copilot và các trợ lý AI tự động tạo ra các lệnh sort() và sorted(), bao gồm các hàm chính và biểu thức lambda, từ một bình luận ngắn. Chúng có thể tái cấu trúc các vòng lặp thành các câu lệnh sort đơn lẻ, mặc dù bạn vẫn nên kiểm tra thứ tự và xác nhận kết quả trong các trường hợp đặc biệt.

Tóm tắt bài viết này với: