Python có hai loại sắp xếp: phương thức sắp xếp (hoặc "hàm thành viên") và hàm sắp xếp . Phương thức sort hoạt động dựa trên nội dung của đối tượng được đặt tên - nghĩ về nó như một hành động mà đối tượng đang thực hiện để tự sắp xếp lại . Hàm sort là một thao tác trên dữ liệu được đại diện bởi một đối tượng và trả về một đối tượng mới có cùng nội dung theo thứ tự được sắp xếp.
Đưa ra một danh sách các số nguyên có tên l
, danh sách đó sẽ được sắp xếp lại nếu chúng ta gọi l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Phương pháp này không có giá trị trả về. Nhưng nếu chúng ta cố gắng chỉ định kết quả l.sort()
thì sao?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
bây giờ bằng thực tế không có gì. Đây là một trong những chi tiết kỳ lạ, hơi khó chịu mà một lập trình viên có thể sẽ quên sau một thời gian vắng mặt với Python (đó là lý do tại sao tôi viết bài này, vì vậy tôi không quên nữa).
Mặt sorted()
khác, hàm sẽ không làm gì với nội dung của l
, nhưng sẽ trả về một danh sách mới, được sắp xếp với cùng nội dung như l
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Xin lưu ý rằng giá trị được trả về không phải là một bản sao sâu , vì vậy hãy thận trọng với các hoạt động có hiệu lực phụ đối với các yếu tố có trong danh sách như bình thường:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]