Przede wszystkim: Python for
pętle nie są naprawdę to samo co pętla C for
. Zamiast tego są For Each loops. Powtarzasz elementy iteracji. range()
generuje powtarzalną sekwencję liczb całkowitych, umożliwiając emulację najbardziej typowego przypadku użycia pętli C for
.
Jednak przez większość czasuchcesz używać chcesz użyć range()
. Byś pętli nad listą samego:
for elem in reversed(some_list):
# elem is a list value
Jeśli trzeba mieć indeks, którego zwykle używasz enumerate()
, aby dodać go do pętli:
for i, elem in reversed(enumerate(some_list)):
# elem is a list value, i is it's index in the list
Dla naprawdę „ostry” pętle, użyj while
lub stworzyć własną funkcję generatora:
def halved_loop(n):
while n > 1:
yield n
n //= 2
for i in halved_loop(10):
print i
wydrukować 10
, 5
, 2
. Można rozszerzyć że do sekwencji też:
def halved_loop(sequence):
n = -1
while True:
try:
yield sequence[n]
except IndexError:
return
n *= 2
for elem in halved_loop(['foo', 'bar', 'baz', 'quu', 'spam', 'ham', 'monty', 'python']):
print elem
która drukuje:
python
monty
spam
foo
odwrócony (zakres (len (LIST)) nie zmniejszy o połowę wartości w. Możesz użyć rozumienia listy zamiast zakresu (10).Albo użyj pętli while! –