Tôi có một danh sách các danh sách. Ví dụ,
[
[0,1,'f'],
[4,2,'t'],
[9,4,'afsd']
]
Nếu tôi muốn sắp xếp danh sách bên ngoài theo trường chuỗi của danh sách bên trong, bạn sẽ làm thế nào trong python?
Tôi có một danh sách các danh sách. Ví dụ,
[
[0,1,'f'],
[4,2,'t'],
[9,4,'afsd']
]
Nếu tôi muốn sắp xếp danh sách bên ngoài theo trường chuỗi của danh sách bên trong, bạn sẽ làm thế nào trong python?
Câu trả lời:
Đây là một công việc cho itemgetter
>>> from operator import itemgetter
>>> L=[[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> sorted(L, key=itemgetter(2))
[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]
Cũng có thể sử dụng hàm lambda ở đây, tuy nhiên hàm lambda chậm hơn trong trường hợp đơn giản này
key=lambda x:x[2].casefold()
. Nếu Python của bạn không đủ mới, chỉ cần sử dụng .lower()
thay vì.casefold()
tại chỗ
>>> l = [[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> l.sort(key=lambda x: x[2])
không sử dụng được sắp xếp:
>>> sorted(l, key=lambda x: x[2])
in place
và not in place
?
Itemgetter cho phép bạn sắp xếp theo nhiều tiêu chí / cột:
sorted_list = sorted(list_to_sort, key=itemgetter(2,0,1))
array.sort(key = lambda x:x[1])
Bạn có thể dễ dàng sắp xếp bằng đoạn mã này, trong đó 1 là chỉ mục của phần tử.
Như thế này:
import operator
l = [...]
sorted_list = sorted(l, key=operator.itemgetter(desired_item_index))
Tôi nghĩ rằng chức năng lambda có thể giải quyết vấn đề của bạn.
old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]
#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])
#Resulst of new_list will be:
[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]
**old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]
#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])**
sửa tôi nếu tôi sai nhưng không phải là 'x [2]' đang gọi mục thứ 3 trong danh sách chứ không phải mục thứ 3 trong danh sách lồng nhau? nó có nên là x [2] [2] không?
Sắp xếp một mảng nhiều chiều thực hiện ở đây
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]
arr.sort(key=lambda x:x[0])
la=set([i[0] for i in Points])
for i in la:
tempres=list()
for j in arr:
if j[0]==i:
tempres.append(j[1])
for j in sorted(tempres,reverse=True):
print(i,j)