Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để sắp xếp các đối tượng trong một danh sách bằng Python?


Để sắp xếp danh sách các int, float, string, ký tự hoặc bất kỳ lớp nào khác đã triển khai phương thức __cmp__ có thể được sắp xếp chỉ bằng cách gọi sort trên danh sách. Nếu bạn muốn sắp xếp danh sách theo thứ tự ngược lại (giảm dần), chỉ cần truyền tham số ngược vào.

ví dụ

my_list = [1, 5, 2, 6, 0]
my_list.sort()
print(my_list)
my_list.sort(reverse=True)
print(my_list)

Đầu ra

Điều này sẽ đưa ra kết quả -

[0, 1, 2, 5, 6]
[6, 5, 2, 1, 0]

Vì các bộ giá trị là bất biến nên chúng không có chức năng sắp xếp tại chỗ có thể được gọi trực tiếp trên chúng. Bạn phải sử dụng hàm đã sắp xếp, hàm này sẽ trả về một danh sách đã được sắp xếp. Nếu bạn không muốn sắp xếp danh sách tại chỗ, hãy sử dụng sắp xếp thay cho phương pháp sắp xếp lớp danh sách.

ví dụ

my_list = [1, 5, 2, 6, 0]
print(sorted(my_list))
print(sorted(my_list, reverse=True))

Đầu ra

Điều này sẽ cung cấp đầu ra -

[0, 1, 2, 5, 6]
[6, 5, 2, 1, 0]

Nếu bạn có danh sách các đối tượng không có phương thức __cmp__ được triển khai trong lớp, bạn có thể sử dụng đối số khóa để chỉ định cách so sánh 2 phần tử. Ví dụ:nếu bạn có từ điển trong danh sách và muốn sắp xếp chúng dựa trên kích thước khóa, bạn có thể làm như sau:

Ví dụ

def get_my_key(obj):
  return obj['size']
my_list = [{'name': "foo", 'size': 5}, {'name': "bar", 'size': 3}, {'name': "baz", 'size': 7}]
my_list.sort(key=get_my_key)
print(my_list)

Đầu ra

Điều này sẽ cung cấp đầu ra -

[{'name': 'bar', 'size': 3}, {'name': 'foo', 'size': 5}, {'name': 'baz', 'size': 7}]

Nó sẽ gọi hàm được chỉ định cho từng mục nhập và sắp xếp dựa trên giá trị này cho từng mục nhập. Bạn cũng có thể chỉ định cùng một chức năng cho một đối tượng, bằng cách trả về một thuộc tính của đối tượng.