2013-05-09 40 views
5

Tôi đã thử kiểm tra xem các danh sách trong python hoạt động như thế nào theo một hướng dẫn tôi đã đọc. Khi tôi cố gắng sử dụng list.sort() hoặc list.reverse(), thông dịch viên cung cấp cho tôi None.chức năng sắp xếp() và đảo ngược() không hoạt động

Xin vui lòng cho tôi biết làm thế nào tôi có thể nhận được một kết quả từ hai phương pháp:

a = [66.25, 333, 333, 1, 1234.5] 
print(a.sort()) 
print(a.reverse()) 

Trả lời

32

.sort().reverse() thay đổi danh sách tại chỗ và trở None Xem mutable sequence documentation:

Các sort()reverse() phương pháp sửa đổi danh sách tại chỗ cho nền kinh tế của không gian khi sắp xếp hoặc đảo ngược một danh sách lớn. Để nhắc bạn rằng chúng hoạt động theo hiệu ứng phụ, chúng không trả về danh sách được sắp xếp hoặc được đảo ngược.

Làm điều này thay vì:

a.sort() 
print(a) 
a.reverse() 
print(a) 

hoặc sử dụng các chức năng sorted()reversed().

print(sorted(a))    # just sorted 
print(list(reversed(a)))  # just reversed 
print(a[::-1])     # reversing by using a negative slice step 
print(sorted(a, reverse=True)) # sorted *and* reversed 

Những phương pháp này trả về một danh sách mới và rời khỏi danh sách đầu vào gốc hoang sơ.

Demo, tại chỗ phân loại và đảo ngược:

>>> a = [66.25, 333, 333, 1, 1234.5] 
>>> a.sort() 
>>> print(a) 
[1, 66.25, 333, 333, 1234.5] 
>>> a.reverse() 
>>> print(a) 
[1234.5, 333, 333, 66.25, 1] 

Và việc tạo mới phân loại và đảo ngược danh sách:

>>> a = [66.25, 333, 333, 1, 1234.5] 
>>> print(sorted(a)) 
[1, 66.25, 333, 333, 1234.5] 
>>> print(list(reversed(a))) 
[1234.5, 1, 333, 333, 66.25] 
>>> print(a[::-1]) 
[1234.5, 1, 333, 333, 66.25] 
>>> print(sorted(a, reverse=True)) 
[1234.5, 333, 333, 66.25, 1] 
>>> a # input list is untouched 
[66.25, 333, 333, 1, 1234.5] 
+2

Chúng ta nên làm cho câu trả lời chuẩn cho tất cả các bản sao của câu hỏi này – jamylak

1

Để tham khảo, bạn có thể xem tài liệu here đặc biệt nói:

Các phương thức sort() và reverse() sửa đổi danh sách tại chỗ cho nền kinh tế của không gian khi phân loại hoặc rever hát một danh sách lớn. Để nhắc bạn rằng chúng hoạt động theo hiệu ứng phụ, chúng không trả về danh sách được sắp xếp hoặc được đảo ngược.

Đừng ngại đọc hướng dẫn sử dụng!

0

Phương pháp này hoạt động tại chỗ.

Mã này hoạt động (python 3.x)

a = [66.25, 333, 333, 1, 1234.5] 
a.sort() 
print(a) 
a.reverse() 
print(a) 

>>> 
[1, 66.25, 333, 333, 1234.5] 
[1234.5, 333, 333, 66.25, 1] 
1

Một sắp xếp tăng dần đơn giản là rất dễ dàng, hãy gọi được sắp xếp() chức năng. Nó trả về danh sách được sắp xếp mới:

>>> sorted([66.25, 333, 333, 1, 1234.5]) 
[1, 66.25, 333, 333, 1234.5] 

sắp xếp() chấp nhận thông số đảo ngược với giá trị boolean.

>>> sorted([66.25, 333, 333, 1, 1234.5], reverse=True) 
[1234.5, 333, 333, 66.25, 1] 
+0

Tôi cần câu trả lời python 2.x, vì vậy điều này làm việc cho tôi :) – randombee

Các vấn đề liên quan