Để sắp xếp một danh sách liệt kê vào cột thứ hai, sử dụng operator.itemgetter()
cho dễ dàng và rõ ràng:
from operator import itemgetter
outputlist = sorted(inputlist, key=itemgetter(1), reverse=True)
hay, để sắp xếp tại chỗ:
from operator import itemgetter
inputlist.sort(key=itemgetter(1), reverse=True)
itemgetter()
là một chút nhanh hơn sử dụng lambda
cho tác vụ.
Demo:
>>> from operator import itemgetter
>>> inputlist = [
... [1, 0.23],
... [2, 0.39],
... [4, 0.31],
... [5, 0.27],
... ]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
[[2, 0.39], [4, 0.31], [5, 0.27], [1, 0.23]]
Bạn chỉ muốn nhìn thấy ngoại trừ của bạn nếu bạn đã điểm nổi giá trị trong inputlist của bạn trực tiếp:
>>> inputlist.append(4.2)
>>> inputlist
[[1, 0.23], [2, 0.39], [4, 0.31], [5, 0.27], 4.2]
>>> sorted(inputlist, key=itemgetter(1), reverse=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object is not subscriptable
(cho Python 3; thông báo lỗi Python 2 là hơi khác, dẫn đến thay vào đó là TypeError: 'float' object has no attribute '__getitem__'
).
Điều này là do cuộc gọi itergetter(1)
được áp dụng cho tất cả các phần tử trong danh sách bên ngoài nhưng chỉ hoạt động trên chuỗi được sắp xếp theo thứ tự, chứ không phải trên một giá trị dấu chấm động hiện được thêm.
Tôi xin lỗi, nhưng đó không phải là một danh sách. Đó là một chuỗi các số với các dòng mới, nhưng không phải là bất kỳ cấu trúc Python nào. Vui lòng đăng mã thực tế không thành công cho bạn và đại diện của danh sách. –
Bây giờ chúng ta có một chuỗi các danh sách python; là có một danh sách bên ngoài? –
Rõ ràng không phải ngoài chủ đề, vì đó là kết quả tìm kiếm Google số 1 để sắp xếp danh sách 2D bằng Python và câu trả lời hay nhất có 15 phiếu bầu. – JeffThompson