Python sắp xếp danh sách các bộ dữ liệu giảm dần

Bạn có phải sắp xếp danh sách các bộ dữ liệu trong chương trình Python của mình không?

Cách đầu tiên để sắp xếp một danh sách các bộ dữ liệu là sử dụng hàm sorted() của Python để trả về một danh sách các bộ dữ liệu được sắp xếp mới. Một cách khác là phương thức list sort() không trả về danh sách mới nhưng cập nhật danh sách ban đầu tại chỗ. Cả sorted() và sort() đều chấp nhận khóa đối số tùy chọn và đảo ngược để cung cấp các tùy chọn sắp xếp bổ sung

Chúng ta sẽ đi qua một số ví dụ sẽ chỉ cho bạn cách sử dụng sorted() và sort()

Bắt đầu nào

Mục lục

Cách sắp xếp danh sách các bộ dữ liệu bằng hàm Sorted

Hãy lấy danh sách các bộ dữ liệu sau đây

numbers = [(2,5,3), (3,1,2), (0,0,1)]

Tôi muốn sắp xếp các bộ dữ liệu trong danh sách dựa trên mục đầu tiên trong mỗi bộ dữ liệu

Python cung cấp một hàm được gọi là sorted() có thể được sử dụng để sắp xếp các mục trong các lần lặp

Xem xét rằng một danh sách có thể lặp lại, tôi mong đợi hàm sorted() có thể sắp xếp danh sách các bộ dữ liệu của chúng ta

Hãy cùng tìm hiểu

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]

Như bạn có thể thấy thứ tự của các bộ trong danh sách đã thay đổi

Theo mặc định, hàm sorted() sắp xếp các bộ dữ liệu dựa trên mục đầu tiên trong mỗi bộ dữ liệu. Đó là lý do tại sao bộ đầu tiên trong danh sách được sắp xếp bắt đầu bằng 0, bộ thứ hai bằng 2 và bộ thứ ba bằng 3

Tôi tự hỏi điều gì sẽ xảy ra nếu phần tử đầu tiên của mỗi bộ giống nhau

>>> numbers = [(2,5,3), (2,1,2), (2,0,1)]
>>> print(sorted(numbers))
[(2, 0, 1), (2, 1, 2), (2, 5, 3)]

Tiêu chí sắp xếp tiếp theo được sử dụng bởi hàm sorted() là phần tử thứ hai của mỗi bộ

Và nếu tất cả các bộ có phần tử thứ hai giống nhau?

>>> numbers = [(2,5,3), (2,5,2), (2,5,1)]
>>> print(sorted(numbers))
[(2, 5, 1), (2, 5, 2), (2, 5, 3)]

Lần này, các bộ trong danh sách được sắp xếp dựa trên phần tử thứ ba khi chúng đã được sắp xếp dựa trên phần tử thứ nhất và thứ hai trong mỗi bộ mà trong trường hợp này là giống nhau

Làm cách nào bạn có thể sắp xếp danh sách các bộ dữ liệu theo phần tử thứ hai?

Theo mặc định, hàm sorted() của Python sắp xếp danh sách các bộ dữ liệu dựa trên mục đầu tiên của bộ dữ liệu

Nhưng, nếu bạn muốn sắp xếp các bộ trong danh sách dựa trên mục thứ hai trong mỗi bộ thì sao?

Để làm điều đó, bạn có thể chuyển một đối số tùy chọn có tên key cho hàm sorted()

Đối số khóa cho phép chỉ định một hàm của một đối số trả về khóa so sánh được sử dụng để so sánh các bộ trong danh sách

Nói cách khác, bạn có thể sử dụng khóa đối số để cung cấp một hàm xác định phần tử trong bộ sẽ được sử dụng làm tiêu chí để sắp xếp các bộ trong danh sách

Một cách nhanh chóng để cung cấp hàm cho đối số chính là sử dụng hàm lambda

Ví dụ: lambda sau đây được áp dụng cho một bộ dữ liệu trả về mục thứ hai của bộ dữ liệu

lambda data: data[1]

Đây là cách bạn có thể kiểm tra hàm lambda này trong trình bao Python bằng cách chuyển một bộ cho nó

>>> (lambda data: data[1])((3, 4, 6))
4

Ghi chú. hãy nhớ rằng dữ liệu [1] trả về mục thứ hai của bộ dữ liệu vì chỉ mục cho chuỗi Python bắt đầu từ số không

Và bây giờ chúng ta có thể chuyển hàm lambda này làm đối số khóa tùy chọn của hàm đã sắp xếp

>>> numbers = [(1,7,3), (4,9,6), (7,3,9)]
>>> print(sorted(numbers, key=lambda data: data[1]))
[(7, 3, 9), (1, 7, 3), (4, 9, 6)]

Như bạn có thể thấy lần này các bộ dữ liệu trong danh sách được sắp xếp dựa trên phần tử thứ hai trong mỗi bộ dữ liệu

Cách sắp xếp danh sách các bộ dữ liệu theo thứ tự đảo ngược

Và nếu bạn muốn sắp xếp một danh sách các bộ dữ liệu theo thứ tự ngược lại thì sao?

Hãy lấy danh sách các bộ dữ liệu sau đây

>>> numbers = [(1,7,3), (4,9,6), (7,3,9)]

Hàm sorted của Python cho phép sắp xếp một danh sách các bộ dữ liệu theo thứ tự đảo ngược chỉ bằng cách truyền một đối số boolean tùy chọn có tên là reverse. Theo mặc định, đảo ngược là Sai nhưng nếu bạn đặt nó thành True, bạn sẽ sắp xếp danh sách các bộ dữ liệu theo thứ tự ngược lại

Hãy xác nhận điều đó bằng cách thêm đối số ngược lại vào câu lệnh mà chúng ta đã sử dụng trong phần trước

________số 8_______

Bạn có thể thấy cách các bộ trong danh sách được sắp xếp theo thứ tự ngược lại dựa trên mục thứ hai trong mỗi bộ không?

Nói cách khác, các bộ dữ liệu trong danh sách được sắp xếp theo thứ tự giảm dần

Sử dụng chức năng sắp xếp Python mà không có Lambda

Trong ví dụ trước, chúng ta đã truyền hàm lambda cho khóa đối số tùy chọn của hàm được sắp xếp

Lambda là một hàm và chúng ta cũng có thể chuyển một hàm bình thường cho đối số khóa tùy chọn

Thử một lần đi

Xác định một hàm có tên là select_item(), hàm này lấy một bộ làm đầu vào và trả về mục thứ hai của bộ

def select_item(data):
    return data[1]

Và bây giờ chúng ta sẽ gọi hàm đã sắp xếp và chuyển hàm select_item cho đối số key

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
0

kết quả là chính xác

Bạn có thể so sánh nó với kết quả mà chúng tôi đã thu được bằng cách sử dụng hàm lambda ở một trong các phần trước

Sắp xếp danh sách các bộ dữ liệu bằng Itemgetter

Có một cách khác để chuyển lambda hoặc hàm tiêu chuẩn cho đối số khóa tùy chọn của hàm đã sắp xếp

Bạn có thể sử dụng hàm itemgetter của mô-đun toán tử Python

Hãy xem cách chức năng itemgetter hoạt động khi chúng ta áp dụng nó cho một bộ dữ liệu

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
1

Nó trả về phần tử thứ hai của bộ dữ liệu dựa trên chỉ mục 1 được truyền cho nó

Và bây giờ hãy sử dụng hàm itemgetter cùng với hàm sorted

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
2

Danh sách các bộ dữ liệu được sắp xếp dựa trên phần tử thứ hai của mỗi bộ dữ liệu (giống như cách chúng ta đã thấy trong các ví dụ trước bằng cách sử dụng hàm lambda hoặc hàm tiêu chuẩn với đối số khóa tùy chọn)

Làm cách nào để bạn sắp xếp danh sách các bộ dữ liệu tại chỗ bằng Python?

Cho đến giờ chúng ta đã sử dụng hàm sorted() của Python để trả về một danh sách các bộ dữ liệu được sắp xếp mới

Và nếu chúng ta muốn cập nhật danh sách các bộ tại chỗ thay vì tạo một danh sách các bộ mới thì sao?

Chúng ta có thể sử dụng phương thức danh sách sort()

Bắt đầu từ danh sách sau

numbers = [(2,5,3), (3,1,2), (0,0,1)]

Thực hiện phương pháp sắp xếp trên các số danh sách và sau đó xác minh giá trị của các số

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
4

Danh sách số đã được sắp xếp tại chỗ

Có ý nghĩa?

Chúng tôi đã sử dụng cách tiếp cận này với một danh sách các bộ nhưng chúng tôi có thể sử dụng nó với các danh sách khác (e. g. một danh sách các số nguyên hoặc một danh sách các danh sách)

Phương thức sort() cũng chấp nhận khóa tùy chọn và các đối số đảo ngược giống như cách mà hàm sorted thực hiện

Đối số khóa tùy chọn

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
5

Đối số ngược tùy chọn

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
6

Sự khác biệt giữa Sắp xếp và Sắp xếp trong Python là gì?

Chúng ta đã thấy sự khác biệt giữa sắp xếp và sắp xếp trong các phần trước, hãy tóm tắt lại để đảm bảo rõ ràng

Sắp xếp là một hàm Python lấy đầu vào là một lần lặp và trả về một danh sách được sắp xếp mới. Sắp xếp là một phương thức danh sách sắp xếp một danh sách tại chỗ (nó không trả về một danh sách mới)

Bạn có thể sử dụng hàm sorted() của Python hoặc phương thức danh sách sort() tùy thuộc vào những gì bạn thích trong ứng dụng của mình

Ví dụ: nếu bạn không cần giữ danh sách ban đầu, bạn có thể quyết định sử dụng phương thức list sort()

Cách sắp xếp danh sách các bộ dữ liệu dựa trên hai phần tử

Cho đến giờ chúng ta đã biết cách chỉ định một phần tử được sử dụng để so sánh các bộ trong danh sách nhằm sắp xếp danh sách

Nhưng cũng có thể chỉ định hai hoặc nhiều phần tử được sử dụng để so sánh khi sắp xếp danh sách

Chúng tôi vẫn sẽ sử dụng đối số khóa tùy chọn và trong ví dụ này, chúng tôi sẽ sử dụng hàm lambda

Ví dụ: giả sử chúng ta muốn sắp xếp danh sách dựa trên phần tử thứ hai và thứ ba của mỗi bộ

Chúng ta có thể sử dụng lambda cung cấp một bộ khi đầu vào trả về một bộ gồm hai giá trị xác định vị trí của các phần tử trong mỗi bộ sẽ được sử dụng để sắp xếp

>>> print(sorted(numbers))
[(0, 0, 1), (2, 5, 3), (3, 1, 2)]
7

Trong trường hợp này, các bộ trong danh sách được sắp xếp đầu tiên dựa trên phần tử thứ hai trong mỗi bộ (dữ liệu[1]) và sau đó dựa trên phần tử thứ ba trong mỗi bộ (dữ liệu[2])

Phân tích kết quả trả về của hàm đã sắp xếp để đảm bảo bạn hiểu đầy đủ cách thức hoạt động của hàm này

Phần kết luận

Sau hướng dẫn này, bạn sẽ có một ý tưởng khá hay về cách sắp xếp danh sách các bộ trong Python

Bạn đã học cách sử dụng hàm sorted() và phương thức list sort() và sự khác biệt giữa chúng là gì

Chúng ta cũng đã thấy các đối số tùy chọn như khóa và đảo ngược cho phép làm cho khả năng sắp xếp của Python trở nên linh hoạt hơn như thế nào

Bài viết liên quan

Nối các chuỗi trong Python [Có ví dụ]

8 điều cần biết để đếm các giá trị duy nhất trong danh sách bằng Python

Tệp Gitignore cho Dự án Python của bạn. Nó trông như thế nào?

Claudio Sabato

Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng

Làm cách nào để sắp xếp danh sách các bộ dữ liệu trong Python theo thứ tự bảng chữ cái?

Khi cần sắp xếp danh sách các bộ theo thứ tự bảng chữ cái, có thể sử dụng phương pháp 'sắp xếp' . Khi sử dụng điều này, nội dung của bộ dữ liệu ban đầu sẽ bị thay đổi, do việc sắp xếp tại chỗ được thực hiện. Hàm 'sắp xếp' sắp xếp các giá trị theo thứ tự tăng dần theo mặc định.

Làm cách nào để sắp xếp danh sách các bộ dữ liệu dựa trên Python giá trị thứ hai?

Thuật toán .
Khởi tạo danh sách Tuple
Định nghĩa hàm Sort(For Sorting Tuple)
Đặt khóa để sắp xếp bằng phần tử thứ hai
Sử dụng danh sách phụ lambda
In kết quả

Chúng ta có thể sắp xếp một danh sách các bộ dữ liệu không?

Phương pháp #1. Sử dụng Sắp xếp bong bóng Sử dụng kỹ thuật Sắp xếp bong bóng để chúng tôi có thể thực hiện sắp xếp. Lưu ý rằng mỗi bộ là một phần tử trong danh sách đã cho. Truy cập phần tử thứ hai của mỗi bộ bằng các vòng lặp lồng nhau. Điều này thực hiện phương pháp sắp xếp tại chỗ.