2011-07-08 67 views

Trả lời

6

Một giải pháp:

for item in L[::-1]: 
    print item 
+2

Lưu ý rằng thao tác này sẽ tạm thời tạo bản sao ngược của chuỗi, trong khi 'đảo ngược()' sẽ chỉ sao chép nếu được yêu cầu. –

+2

+3 để tạo bản sao? Xin lỗi nhưng điều này xứng đáng là -3 –

+0

'L [:: - 1]:' chạy nhanh hơn 'đảo ngược (L) ' –

16

Batteries included.

for i in reversed([1, 2, 3]): 
    print i 

Slicing danh sách (ls[::-1]) là rất tốt cho thực hiện một bản sao đảo ngược, nhưng trên máy tính của tôi nó chậm hơn cho lần lặp, ngay cả khi danh sách là đã có trong bộ nhớ:

>>> def sliceit(x): 
...  l = range(x) 
...  for i in l[::-1]: 
...   i 
...  
>>> def reverseit(x): 
...  l = range(x) 
...  for i in reversed(l): 
...   i 
...   
>>> %timeit sliceit(100) 
100000 loops, best of 3: 4.04 µs per loop 
>>> %timeit reverseit(100) 
100000 loops, best of 3: 3.79 µs per loop 
>>> %timeit sliceit(1000) 
10000 loops, best of 3: 34.9 µs per loop 
>>> %timeit reverseit(1000) 
10000 loops, best of 3: 32.5 µs per loop 
>>> %timeit sliceit(10000) 
1000 loops, best of 3: 364 µs per loop 
>>> %timeit reverseit(10000) 
1000 loops, best of 3: 331 µs per loop 

Như thường đúng trong trường hợp như thế này , sự khác biệt là khá không đáng kể. Nó có thể khác với các phiên bản Python khác nhau (tôi đã sử dụng Python 2.7 cho bài kiểm tra trên). Lợi ích thực sự của việc sử dụng reversed là khả năng đọc - sẽ thích hợp hơn trong hầu hết các trường hợp ngay cả khi nó tốn thêm một vài micro giây.

7

Đảo ngược chuỗi.

L = [1,2,3] 
for item in reversed(L) 
    print item #-->3,2,1 
3

Tôi biết chủ đề này tại là tuổi, nhưng một bình luận dưới sự trả lời chấp nhận chứa tuyên bố rằng việc sử dụng [::-1] là nhanh hơn so với sử dụng reversed(). Điều này chỉ đúng nếu danh sách của bạn được đưa vào bộ nhớ một cách rõ ràng, là không cần thiết khi thực hiện đếm ngược. Nếu không nó là chậm hơn:

>>> timeit.Timer(stmt="range(1,1000)[::-1]").timeit() 
10.801303316066111 
>>> timeit.Timer(stmt="list(reversed(xrange(1,1000)))").timeit() 
9.484562358901144 

... [::-1] sử dụng không gian hơn reversed.

+0

Trên máy tính của tôi 'đảo ngược' nhanh hơn ngay cả đối với các danh sách đã có trong bộ nhớ. (Xem thời gian trên câu trả lời đã chỉnh sửa của tôi.) – senderle

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