Hướng dẫn how do you sort a multidimensional list in python? - làm thế nào để bạn sắp xếp một danh sách đa chiều trong python?

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:

ID khách hàngID hóa đơnNgày quá hạnTổng hóa đơn
ABC12 3 $ 100
Def10 5 $ 200
GHI13 3 $ 1.000
Dữ liệu

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

data = [['ABC', 12, 3, 100],
        ['DEF', 10, 5, 200],
        ['GHI', 13, 3, 1000]]
1, không có. Đặt tham số key cho cả hai loại bằng hàm
data = [['ABC', 12, 3, 100],
        ['DEF', 10, 5, 200],
        ['GHI', 13, 3, 1000]]
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.

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
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.

Chúng ta có thể sắp xếp một danh sách 2D trong Python không?

Để 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 Sort (), làm biến đổi danh sách hoặc hàm Sắp xếp (), không có.Đặt tham số khóa cho cả hai loại bằng hàm Lambda và trả về một tuple của các cột để sắp xếp theo thứ tự sắp xếp cần thiết.use the sort() list method, which mutates the list, or the sorted() function, which does not. Set the key parameter for both types using a lambda function and return a tuple of the columns to sort according to the required sort order.

Bạn có thể sắp xếp một mảng đa chiều không?

Array_Multisort () có thể được sử dụng để sắp xếp một số mảng cùng một lúc hoặc một mảng đa chiều theo một hoặc nhiều chiều.Các phím liên kết (chuỗi) sẽ được duy trì, nhưng các khóa số sẽ được chỉ định lại.. Associative (string) keys will be maintained, but numeric keys will be re-indexed.

Bạn có thể sắp xếp một danh sách lồng nhau không?

Sẽ có ba cách riêng biệt để sắp xếp các danh sách lồng nhau.Thứ nhất là sử dụng Sắp xếp bong bóng, thứ hai là sử dụng phương thức Sort () và thứ ba là sử dụng phương thức Sắp xếp ().use Bubble Sort, the second is to use the sort() method, and the third is to use the sorted() method.