2012-03-28 24 views
19

Có cách nào để sử dụng hàm range() với stride -1 không?Phạm vi Python() với các bước tiến tiêu cực

Ví dụ: sử dụng range(10, -10) thay vì các giá trị được đặt trong ngoặc vuông bên dưới?

tức là các dòng sau:

for y in range(10,-10) 

Thay vì

for y in [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]: 

Rõ ràng người ta có thể làm điều này với một loại vòng lặp tao nhã hơn, nhưng ví dụ range() sẽ làm việc tốt hơn nhiều cho những gì tôi muốn.

Trả lời

30
range(10,-11,-1) 

Nói chung, nó không tốn bất cứ điều gì để thử - bạn có thể gõ này vào người phiên dịch và xem những gì nó làm.

Để tham khảo, đây cũng là tất cả documented, nhưng chủ yếu là tôi muốn khuyến khích bạn không cảm thấy ngại chơi xung quanh và xem điều gì xảy ra. Như bạn có thể thấy, trực giác của bạn đã được phát hiện.

+5

Có thể tôi đã sai - Tôi biết đây không phải là lần đầu tiên - tôi không nghĩ rằng có bất kỳ nhu cầu nào về sự hận thù. Tôi đồng ý rằng câu hỏi này rất ít nỗ lực nghiên cứu; Tuy nhiên, điều này có thể là một điều khó khăn để nắm bắt cho một newbie. – bernie

+5

Có thể bạn đang đúng, đó là điểm yếu. Có lẽ khuyến khích tích cực sẽ tốt hơn ... – Useless

+1

Không hại gì không phạm lỗi. Có một upvote – bernie

5

Vâng, bằng cách định nghĩa một bước:

for i in range(10, -11, -1): 
    print(i) 
2

Có, tuy nhiên bạn sẽ cần xác định rằng bạn muốn lùi bước bằng cách đặt đối số bước thành -1.

Sử dụng:

for y in range(10, -10, -1)

+1

Rất tiếc, không in được -10 ... nó từ 10 đến -9. –

1

Bên cạnh những câu trả lời tốt khác, có một sự thay thế:

for y in reversed(range(-10, 11)): 

Xem tài liệu cho reversed().

1

Bạn có thể nhận thấy rằng chức năng phạm vi chỉ hoạt động theo thứ tự tăng dần mà không có thông số thứ ba. Nếu bạn sử dụng mà không có tham số thứ ba trong khối phạm vi, nó sẽ không hoạt động.

for i in range(10,-10) 

Vòng lặp trên sẽ không hoạt động. Để vòng lặp trên hoạt động, bạn phải sử dụng thông số thứ ba làm số âm.

for i in range(10,-10,-1) 
Các vấn đề liên quan