2015-03-27 25 views
8

Trong Java, tôi đã sau vòng lặp for và tôi đang học Python:Làm thế nào để đếm ngược trong vòng lặp?

for (int index = last-1; index >= posn; index--) 

Câu hỏi của tôi là đơn giản và có lẽ hiển nhiên đối với hầu hết mọi người đã quen thuộc với Python. Tôi muốn mã rằng 'cho' vòng lặp trong Python. Tôi có thể làm cái này như thế nào?

Tôi cố gắng để làm như sau:

for index in range(last-1, posn, -1): 

Tôi nghĩ rằng nó phải được range(last-1, posn + 1, -1). Tôi có đúng không?

Tôi biết ơn bất kỳ ai đặc biệt là những người sẽ giải thích cho tôi cách hiểu các chỉ mục hoạt động trong Python.

+0

Nó nói 'IndexError: danh sách chỉ mục ra khỏi phạm vi' – Jika

+0

như một phần: tùy thuộc vào những gì bạn làm mà bạn có thể thích liệt kê: 'cho i, e đảo ngược (danh sách (liệt kê (list_here))):' nơi tôi sẽ đếm từ phần tử cuối cùng và e sẽ là các yếu tố thực tế – JGreenwell

+1

@Jika Vì vậy, hãy nhìn vào các chỉ mục được tạo theo phạm vi. Sau đó sửa mã của bạn. – user2864740

Trả lời

19

Chức năng phạm vi trong python có cú pháp:

range(start, end, step)

Nó có cú pháp tương tự như danh sách python nơi bắt đầu là bao gồm nhưng cuối cùng là độc quyền.

Vì vậy, nếu bạn muốn đếm từ 5 đến 1, bạn sẽ sử dụng range(5,0,-1) và nếu bạn muốn đếm từ last đến posn, bạn sẽ sử dụng range(last, posn - 1, -1).

2

Trước tiên tôi recommand bạn có thể thử sử dụng in ấn và quan sát hành động:

for i in range(0, 5, 1): 
    print i 

kết quả:

0 
1 
2 
3 
4 

Bạn có thể hiểu được nguyên tắc hoạt động. Thực tế, phạm vi quét range là từ 0 đến 5-1. Nó bằng 0 <= i < 5

Khi bạn thực sự hiểu về vòng lặp trong python, tôi nghĩ rằng thời gian chúng ta quay lại kinh doanh. Hãy tập trung vấn đề của bạn.

Bạn muốn sử dụng DECREMENT for-loop trong python. Tôi đề xuất một hướng dẫn cho vòng lặp chẳng hạn.

for i in range(5, 0, -1): 
    print i 

kết quả:

5 
4 
3 
2 
1 

Do đó nó có thể được nhìn thấy, nó tương đương với 5 >= i > 0

Bạn muốn thực hiện mã java của bạn trong python:

for (int index = last-1; index >= posn; index--) 

Cần mã điều này:

for i in range(last-1, posn-1, -1) 
7

Trong python, khi bạn có một iterable, thông thường bạn lặp mà không có một chỉ số:

letters = 'abcdef' # or a list, tupple or other iterable 
for l in letters: 
    print(l) 

Nếu bạn cần phải đi qua iterable theo thứ tự ngược lại, bạn sẽ làm gì:

for l in letters[::-1]: 
    print(l) 

khi cho bất cứ lý do bạn cần chỉ mục, bạn có thể sử dụng enumerate:

for i, l in enumerate(letters, start=1): #start is 0 by default 
    print(i,l) 

Bạn có thể liệt kê theo thứ tự ngược quá ...

for i, l in enumerate(letters[::-1]) 
    print(i,l) 

ON KHÁC LƯU Ý ...

Thông thường khi chúng tôi đi qua một iterable chúng tôi làm điều đó để áp dụng các thủ tục hoặc chức năng tương tự cho mỗi yếu tố. Trong những trường hợp này, nó là tốt hơn để sử dụng map:

Nếu chúng ta cần phải capitilize mỗi chữ cái:

map(str.upper, letters) 

Hoặc lấy mã Unicode của từng chữ cái:

map(ord, letters) 
Các vấn đề liên quan