list.sort
, sorted
Chấp nhận tham số key
tùy chọn. Hàm key
được sử dụng để tạo khóa so sánh.
>>> sorted[lst, key=lambda x: x[1], reverse=True]
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
>>> sorted[lst, key=lambda x: -x[1]]
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
>>> import operator
>>> sorted[lst, key=operator.itemgetter[1], reverse=True]
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
Làm thế nào để bạn sắp xếp một danh sách hai chiều trong Python một cách dễ dàng mà không cần nhập thư viện? Rất may, có một số chức năng gốc trong Python khiến cho việc sắp xếp danh sách trở nên dễ dàng.
Gần đây tôi đã có một dự án mà tôi đã có bộ dữ liệu hai chiều sau, được thể hiện theo cách sau:
ABC | 12 | 3 | $ 100 |
Def | 10 | 5 | $ 200 |
GHI | 13 | 3 | $ 1.000 |
Dữ liệu dạng bảng tương tự này sẽ được biểu diễn trong danh sách Python 2D như sau:
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
Yêu cầu tôi có với dữ liệu này là sắp xếp danh sách theo cột thứ ba trước theo thứ tự giảm dần, do đó đặt ở đầu danh sách được sắp xếp mới là hóa đơn quá hạn nhất. Sau đó, tôi muốn sắp xếp dữ liệu theo cột thứ ba thứ hai theo thứ tự giảm dần, đặt hóa đơn với số tiền cao nhất quá hạn cao hơn với hóa đơn quá hạn trong cùng một ngày.descending order, thereby placing at the top of the new sorted list the most overdue invoices. Then I wanted to sort the data by the third column second in descending order, placing the invoices with the highest amount overdue higher with invoices overdue on the same day.
Để sắp xếp một danh sách hai chiều trong Python, hãy sử dụng phương thức Danh sách ____1010, làm biến đổi danh sách hoặc hàm
1, không có. Đặt tham số data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
key
cho cả hai loại bằng hàm
3 và trả về một tuple của các cột để sắp xếp theo thứ tự sắp xếp bắt buộc.data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
Sử dụng ví dụ mã của tôi ở trên, ở đây, cách cả hai loại hoạt động:
Sắp xếp phương pháp danh sách
Một cách để sắp xếp một danh sách hai chiều trong Python là bằng cách sử dụng phương thức Danh sách ____1010. Phương thức danh sách
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
0 có hai tham số: key
và data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7 cho phép bạn đặt những gì để sắp xếp và cách sắp xếp.what to sort and how to sort.Nếu chúng tôi áp dụng điều này vào ví dụ của chúng tôi ở trên, thì đây là cách mà điều này sẽ trông như thế nào:
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [row[2], row[3]], reverse=True]
print[data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
Lưu ý một số điều ở đây: Đầu tiên, trạng thái biến
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
8 ban đầu đã thay đổi, đây là nguyên tắc đột biến tại nơi làm việc.Bằng cách sử dụng phương pháp này, nó sẽ sửa đổi trạng thái ban đầu của biến hoạt động. Do đó, nếu trạng thái ban đầu của danh sách trước khi hoạt động là quan trọng, thì bạn muốn tránh sử dụng phương pháp này trong danh sách của mình [xem bên dưới để biết chức năng không đột biến].want to avoid using this method on your list [see below for a non-mutating function].
Điều thứ hai cần chú ý là tham số chính.
Tham số này chấp nhận một hàm, mà tôi đã sử dụng làm hàm
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
3 và lặp qua từng phần tử trong danh sách. Mỗi phần tử là một hàng của danh sách hai chiều của tôi, được dán nhãn là tham số data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [row[2], row[3]], reverse=True]
print[data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
0 cho hàm Lambda. Sau đó, chúng tôi tạo ra một tuple chứa những gì chúng tôi muốn sắp xếp.Trong ví dụ này, tôi muốn đặt loại chính trên cột thứ ba, có chỉ số 2 trong danh sách Python. Sau đó, tôi muốn sắp xếp cột thứ tư, có chỉ số là 3. Do đó, bộ tuple này chỉ chứa các tham chiếu đến các cột đó và chèn các giá trị của chúng vào bộ tuple.
Lưu ý thứ ba là tham số
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7 đặt thứ tự giảm dần. Và điều này là tương đối dễ dàng khi xem xét rằng cả hai yêu cầu của tôi đều có cùng một phương pháp sắp xếp, nhưng nếu họ đã làm thì sao?Thứ tự sắp xếp khác nhau cho các cột khác nhau?
Điều gì sẽ xảy ra nếu tôi muốn các phương thức sắp xếp khác nhau trên các cột khác nhau. Ví dụ: điều gì sẽ xảy ra nếu tôi muốn cột thứ ba theo thứ tự giảm dần, nhưng tôi muốn cột thứ tư theo thứ tự tăng dần?
Để đạt được điều này, chúng tôi sẽ bỏ tham số
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7 và hoạt động trên các giá trị được đặt trong các chức năng Lambda của chúng tôi, như vậy:data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [-row[2], row[3]]]
print[data]
# [['DEF', 10, 5, 200], ['ABC', 12, 3, 100], ['GHI', 13, 3, 1000]]
Bạn đã thấy những thay đổi?
Bên cạnh việc loại bỏ tham số
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7, hãy xem mục nhập tuple đầu tiên trong hàm Lambda của chúng tôi: data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [row[2], row[3]], reverse=True]
print[data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
4 Lưu ý làm thế nào có một dấu âm ở phía trước giá trị hàng.Bằng cách xóa tham số
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7, nó sẽ sắp xếp tất cả các giá trị theo thứ tự tăng dần theo mặc định và bằng cách đặt âm trên các giá trị số có trong cột thứ ba của tôi, nó đặt các số âm lớn hơn lên trên.Chức năng được sắp xếp
Nếu bạn muốn giữ trạng thái của danh sách ban đầu và muốn trả về một danh sách 2 chiều mới thì bạn sẽ muốn sử dụng chức năng sorted
.
Hàm sorted
có cùng tham số với phương thức danh sách
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [row[2], row[3]], reverse=True]
print[data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
8 được sử dụng ở trên, nhưng cũng có một tham số bổ sung ở phía trước để thông báo dữ liệu nào được sắp xếp, sự khác biệt duy nhất là nó trả về một danh sách mới, như được hiển thị bên dưới:data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
new_data = sorted[data, key=lambda row: [row[2], row[3]], reverse=True]
print[new_data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
Một lần nữa, nếu các yêu cầu của loại là khác nhau theo các loại cột thì chúng ta có thể xóa tham số
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
7 [mặc định là thứ tự tăng dần] và sau đó tiền tố , như vậy:data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
new_data = sorted[data, key=lambda row: [-row[2], row[3]]]
print[data]
# [['DEF', 10, 5, 200], ['ABC', 12, 3, 100], ['GHI', 13, 3, 1000]]
Bản tóm tắt
Để sắp xếp danh sách hai chiều bằng nhiều cột và các phương thức sắp xếp khác nhau [ví dụ: thứ tự giảm dần cho một, đơn đặt hàng tăng dần cho một thứ tự khác] trong Python, mà không sử dụng bất kỳ thư viện nhập khẩu nào, hãy sử dụng phương thức danh sách ____10 tích hợp và chức năng
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
1.Bằng cách sử dụng phương thức danh sách
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
data.sort[key=lambda row: [row[2], row[3]], reverse=True]
print[data]
# [['DEF', 10, 5, 200], ['GHI', 13, 3, 1000], ['ABC', 12, 3, 100]]
8 tích hợp, bạn có thể biến danh sách ban đầu theo các yêu cầu mong muốn của bạn, trong khi bằng cách sử dụng hàm sorted
, nó sẽ trả về danh sách 2D được sắp xếp mới.Một cách phổ biến khác để sắp xếp các mục trong Python là sử dụng các chức năng trong hàm
data = [['ABC', 12, 3, 100],
['DEF', 10, 5, 200],
['GHI', 13, 3, 1000]]
3 như được thấy trong ví dụ tôi sắp xếp các mục trong danh sách dựa trên độ dài chuỗi của chúng.