Ghi chú. Sự khác biệt đơn giản nhất giữa
list.sort[key=..., reverse=...]7 và
sorted[list, key=..., reverse=...]0 là.
list.sort[key=..., reverse=...]7 thay đổi danh sách trực tiếp và không trả về bất kỳ giá trị nào, trong khi
sorted[list, key=..., reverse=...]0 không thay đổi danh sách và trả về danh sách đã sắp xếp
sắp xếp [] Tham số
Theo mặc định,
list.sort[key=..., reverse=...]7 không yêu cầu bất kỳ tham số bổ sung nào. Tuy nhiên, nó có hai tham số tùy chọn
- đảo ngược - Nếu
sorted[list, key=..., reverse=...]
4, danh sách được sắp xếp bị đảo ngược [hoặc được sắp xếp theo thứ tự Giảm dần] - key - chức năng đóng vai trò là khóa để so sánh sắp xếp
sắp xếp [] Giá trị trả về
Phương thức
list.sort[key=..., reverse=...]7 không trả về bất kỳ giá trị nào. Thay vào đó, nó thay đổi danh sách ban đầu
Nếu bạn muốn một hàm trả về danh sách đã sắp xếp thay vì thay đổi danh sách ban đầu, hãy sử dụng
sorted[list, key=..., reverse=...]0
ví dụ 1. Sắp xếp một danh sách nhất định
________số 8đầu ra
Sorted list: ['a', 'e', 'i', 'o', 'u']
Sắp xếp theo thứ tự giảm dần
Phương thức
list.sort[key=..., reverse=...]7 chấp nhận tham số
sorted[list, key=..., reverse=...]8 làm đối số tùy chọn
Đặt
sorted[list, key=..., reverse=...]9 sắp xếp danh sách theo thứ tự giảm dần
sorted[list, key=..., reverse=...]3
Ngoài ra, đối với
sorted[list, key=..., reverse=...]0, bạn có thể sử dụng đoạn mã sau
sorted[list, key=..., reverse=...]5
ví dụ 2. Sắp xếp danh sách theo thứ tự giảm dần
sorted[list, key=..., reverse=...]6
đầu ra
sorted[list, key=..., reverse=...]7
Sắp xếp với chức năng tùy chỉnh bằng phím
Nếu bạn muốn triển khai sắp xếp của riêng mình, phương thức
list.sort[key=..., reverse=...]7 cũng chấp nhận hàm
# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']
# sort the vowels
vowels.sort[]
# print vowels
print['Sorted list:', vowels]
2 làm tham số tùy chọnDựa vào kết quả của hàm key, có thể sắp xếp danh sách đã cho
list.sort[key=..., reverse=...]0
Ngoài ra để sắp xếp
list.sort[key=..., reverse=...]0
Ở đây,
# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']
# sort the vowels
vowels.sort[]
# print vowels
print['Sorted list:', vowels]
3 là hàm có sẵn của Python để đếm độ dài của một phần tửDanh sách được sắp xếp dựa trên độ dài của từng phần tử, từ thấp nhất đến cao nhất
Chúng tôi biết rằng một bộ dữ liệu được sắp xếp theo tham số đầu tiên của nó theo mặc định. Hãy xem cách tùy chỉnh phương pháp
list.sort[key=..., reverse=...]7 để sắp xếp bằng phần tử thứ hai
ví dụ 3. Sắp xếp danh sách bằng phím
list.sort[key=..., reverse=...]1
đầu ra
list.sort[key=..., reverse=...]2
Hãy lấy một ví dụ khác. Giả sử chúng ta có một danh sách thông tin về nhân viên của một văn phòng trong đó mỗi phần tử là một từ điển
Chúng ta có thể sắp xếp danh sách theo cách sau
list.sort[key=..., reverse=...]3
đầu ra
list.sort[key=..., reverse=...]4
Ở đây, đối với trường hợp đầu tiên, hàm tùy chỉnh của chúng tôi trả về tên của từng nhân viên. Vì tên là
# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']
# sort the vowels
vowels.sort[]
# print vowels
print['Sorted list:', vowels]
5, Python theo mặc định sắp xếp nó theo thứ tự bảng chữ cáiĐối với trường hợp thứ hai, tuổi [
# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']
# sort the vowels
vowels.sort[]
# print vowels
print['Sorted list:', vowels]
6] được trả về và được sắp xếp theo thứ tự tăng dầnĐối với trường hợp thứ ba, hàm trả về mức lương [
# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']
# sort the vowels
vowels.sort[]
# print vowels
print['Sorted list:', vowels]
6] và được sắp xếp theo thứ tự giảm dần bằng cách sử dụng sorted[list, key=..., reverse=...]9
Bạn nên sử dụng hàm lambda khi hàm này có thể được tóm tắt trong một dòng. Vì vậy, chúng ta cũng có thể viết chương trình trên như
Danh sách Python có phương thức
sorted[list, key=..., reverse=...]27 tích hợp để sửa đổi danh sách tại chỗ. Ngoài ra còn có một chức năng tích hợp sẵn
sorted[list, key=..., reverse=...]28 để xây dựng một danh sách được sắp xếp mới từ một lần lặp
Trong tài liệu này, chúng tôi khám phá các kỹ thuật khác nhau để sắp xếp dữ liệu bằng Python
Khái niệm cơ bản về sắp xếp¶
Một sắp xếp tăng dần đơn giản là rất dễ dàng. chỉ cần gọi hàm
sorted[list, key=..., reverse=...]28. Nó trả về một danh sách được sắp xếp mới
sorted[list, key=..., reverse=...]5
Bạn cũng có thể sử dụng phương thức
sorted[list, key=..., reverse=...]27. Nó sửa đổi danh sách tại chỗ [và trả về
sorted[list, key=..., reverse=...]71 để tránh nhầm lẫn]. Thông thường nó kém tiện lợi hơn so với
sorted[list, key=..., reverse=...]28 - nhưng nếu bạn không cần danh sách ban đầu thì nó sẽ hiệu quả hơn một chút
sorted[list, key=..., reverse=...]2
Một điểm khác biệt nữa là phương thức
sorted[list, key=..., reverse=...]27 chỉ được xác định cho danh sách. Ngược lại, hàm
sorted[list, key=..., reverse=...]28 chấp nhận bất kỳ khả năng lặp nào
sorted[list, key=..., reverse=...]7
Chức năng chính¶
Cả
sorted[list, key=..., reverse=...]27 và
sorted[list, key=..., reverse=...]28 đều có một tham số chính để chỉ định một hàm [hoặc hàm có thể gọi khác] sẽ được gọi trên từng phần tử danh sách trước khi thực hiện so sánh
Ví dụ: đây là so sánh chuỗi không phân biệt chữ hoa chữ thường
list.sort[key=..., reverse=...]5
Giá trị của tham số khóa phải là một hàm [hoặc hàm có thể gọi khác] nhận một đối số duy nhất và trả về một khóa để sử dụng cho mục đích sắp xếp. Kỹ thuật này nhanh vì chức năng chính được gọi chính xác một lần cho mỗi bản ghi đầu vào
Một mẫu phổ biến là sắp xếp các đối tượng phức tạp bằng cách sử dụng một số chỉ số của đối tượng làm khóa. Ví dụ
list.sort[key=..., reverse=...]6
Kỹ thuật tương tự hoạt động cho các đối tượng có thuộc tính được đặt tên. Ví dụ
list.sort[key=..., reverse=...]7
Chức năng mô-đun vận hành¶
Các mẫu hàm khóa hiển thị ở trên rất phổ biến, vì vậy Python cung cấp các hàm tiện lợi để thực hiện các hàm truy cập dễ dàng và nhanh hơn. Mô-đun
sorted[list, key=..., reverse=...]77 có chức năng
sorted[list, key=..., reverse=...]78,
sorted[list, key=..., reverse=...]79 và
list.sort[key=..., reverse=...]50
Sử dụng các chức năng đó, các ví dụ trên trở nên đơn giản và nhanh hơn
sorted[list, key=..., reverse=...]2
Các chức năng mô-đun toán tử cho phép nhiều cấp độ sắp xếp. Ví dụ: để sắp xếp theo lớp rồi theo tuổi
sorted[list, key=..., reverse=...]3
Tăng dần và giảm dần¶
Cả
sorted[list, key=..., reverse=...]27 và
sorted[list, key=..., reverse=...]28 đều chấp nhận tham số đảo ngược có giá trị boolean. Điều này được sử dụng để đánh dấu các loại giảm dần. Ví dụ, để lấy dữ liệu sinh viên theo thứ tự tuổi đảo ngược
sorted[list, key=..., reverse=...]6
Sắp xếp Ổn định và Sắp xếp Phức tạp¶
Sắp xếp được đảm bảo ổn định. Điều đó có nghĩa là khi nhiều bản ghi có cùng khóa, thứ tự ban đầu của chúng được giữ nguyên
sorted[list, key=..., reverse=...]7
Lưu ý cách hai bản ghi cho màu xanh lam giữ nguyên thứ tự ban đầu của chúng để đảm bảo
list.sort[key=..., reverse=...]53 đứng trước
list.sort[key=..., reverse=...]54
Thuộc tính tuyệt vời này cho phép bạn xây dựng các sắp xếp phức tạp trong một loạt các bước sắp xếp. Ví dụ: để sắp xếp dữ liệu học sinh theo lớp giảm dần rồi tuổi tăng dần, hãy thực hiện sắp xếp theo tuổi trước rồi sắp xếp lại bằng cách sử dụng lớp
sorted[list, key=..., reverse=...]20
Điều này có thể được trừu tượng hóa thành một hàm bao bọc có thể lấy một danh sách và bộ dữ liệu của trường và sắp xếp chúng theo nhiều lượt
sorted[list, key=..., reverse=...]21
Thuật toán Timsort được sử dụng trong Python thực hiện nhiều loại một cách hiệu quả vì nó có thể tận dụng mọi thứ tự đã có trong tập dữ liệu
Trang trí-Sắp xếp-Không trang trí¶
Thành ngữ này được gọi là Trang trí-Sắp xếp-Không trang trí sau ba bước của nó
Đầu tiên, danh sách ban đầu được trang trí bằng các giá trị mới kiểm soát thứ tự sắp xếp
Thứ hai, danh sách trang trí được sắp xếp
Cuối cùng, phần trang trí được loại bỏ, tạo danh sách chỉ chứa các giá trị ban đầu theo thứ tự mới
Ví dụ: để sắp xếp dữ liệu sinh viên theo lớp bằng cách sử dụng phương pháp DSU
sorted[list, key=..., reverse=...]22
Thành ngữ này hoạt động vì các bộ dữ liệu được so sánh theo từ điển;
Trong mọi trường hợp, không nhất thiết phải đưa chỉ mục i vào danh sách được trang trí, nhưng việc đưa chỉ mục này vào sẽ mang lại hai lợi ích
Sắp xếp ổn định – nếu hai mục có cùng khóa, thứ tự của chúng sẽ được giữ nguyên trong danh sách đã sắp xếp
Các mục ban đầu không cần phải so sánh được vì thứ tự của các bộ được trang trí sẽ được xác định bởi nhiều nhất hai mục đầu tiên. Vì vậy, ví dụ, danh sách ban đầu có thể chứa các số phức không thể sắp xếp trực tiếp
Một tên khác cho thành ngữ này là biến đổi Schwartzian, sau Randal L. Schwartz, người đã phổ biến nó cho các lập trình viên Perl
Giờ đây, việc sắp xếp Python cung cấp các hàm khóa, kỹ thuật này thường không cần thiết
Các hàm so sánh¶
Không giống như các hàm chính trả về giá trị tuyệt đối để sắp xếp, hàm so sánh tính toán thứ tự tương đối cho hai đầu vào
Ví dụ: thang cân bằng so sánh hai mẫu đưa ra thứ tự tương đối. nhẹ hơn, bằng hoặc nặng hơn. Tương tự như vậy, một hàm so sánh chẳng hạn như
list.sort[key=..., reverse=...]55 sẽ trả về giá trị âm cho giá trị nhỏ hơn, 0 nếu giá trị đầu vào bằng nhau hoặc giá trị dương cho giá trị lớn hơn
Thường gặp hàm so sánh khi dịch thuật toán từ ngôn ngữ khác. Ngoài ra, một số thư viện cung cấp các chức năng so sánh như một phần của API của họ. Ví dụ,
list.sort[key=..., reverse=...]56 là một hàm so sánh
Để phù hợp với những tình huống đó, Python cung cấp
list.sort[key=..., reverse=...]57 để bọc chức năng so sánh để làm cho nó có thể sử dụng được như một chức năng chính
sorted[list, key=..., reverse=...]23
Vụn vặt¶
Để sắp xếp theo ngôn ngữ, hãy sử dụng
list.sort[key=..., reverse=...]
58 cho chức năng chính hoặclist.sort[key=..., reverse=...]
56 cho chức năng so sánh. Điều này là cần thiết vì thứ tự sắp xếp “theo bảng chữ cái” có thể khác nhau giữa các nền văn hóa ngay cả khi bảng chữ cái bên dưới giống nhauTham số đảo ngược vẫn duy trì tính ổn định sắp xếp [để các bản ghi có khóa bằng nhau giữ nguyên thứ tự ban đầu]. Thật thú vị, hiệu ứng đó có thể được mô phỏng mà không cần tham số bằng cách sử dụng hàm
list.sort[key=..., reverse=...]
60 dựng sẵn hai lầnsorted[list, key=..., reverse=...]
24Các thói quen sắp xếp sử dụng
list.sort[key=..., reverse=...]
61 khi so sánh giữa hai đối tượng. Vì vậy, thật dễ dàng để thêm một thứ tự sắp xếp tiêu chuẩn vào một lớp bằng cách định nghĩa một phương thứclist.sort[key=..., reverse=...]
62sorted[list, key=..., reverse=...]
25Tuy nhiên, lưu ý rằng
list.sort[key=..., reverse=...]
61 có thể quay lại sử dụnglist.sort[key=..., reverse=...]
64 nếulist.sort[key=..., reverse=...]
62 không được triển khai [xemlist.sort[key=..., reverse=...]
66]Các chức năng chính không cần phụ thuộc trực tiếp vào các đối tượng được sắp xếp. Một chức năng chính cũng có thể truy cập các tài nguyên bên ngoài. Chẳng hạn, nếu điểm của sinh viên được lưu trữ trong từ điển, chúng có thể được sử dụng để sắp xếp danh sách tên sinh viên riêng biệt