jak zapętlić w liście Pythona?jak zapętlić w liście Pythona (odliczanie)
np
pętla:
L = [1,2,3]
for item in L
print item #-->1,2,3
pętli w dół:
L = [1,2,3]
for ???
print item #-->3,2,1
dziękuję
jak zapętlić w liście Pythona?jak zapętlić w liście Pythona (odliczanie)
np
pętla:
L = [1,2,3]
for item in L
print item #-->1,2,3
pętli w dół:
L = [1,2,3]
for ???
print item #-->3,2,1
dziękuję
Innym rozwiązaniem:
for item in L[::-1]:
print item
for i in reversed([1, 2, 3]):
print i
Krojenie listę (ls[::-1]
) doskonale nadaje się do tworzenia odwróconą kopię, ale na moim komputerze jest wolniejszy dla iteracji, nawet jeśli lista jest już w pamięci:
>>> 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
Jak to często prawdziwe w takich przypadkach różnica jest dość znikoma. Może być różny dla różnych wersji Pythona (do powyższego testu użyłem Pythona 2.7). Prawdziwa korzyść z używania reversed
jest czytelna - w większości przypadków byłaby lepsza, nawet jeśli kosztowałaby kilka dodatkowych mikrosekund.
Odwróć sekwencję.
L = [1,2,3]
for item in reversed(L)
print item #-->3,2,1
Znam ten wątek jest teraz lat, ale komentarz pod przyjętym odpowiedź zawiera twierdzenie, że za pomocą [::-1]
jest szybsze niż przy użyciu reversed()
. Jest to prawdą tylko wtedy, gdy twoja lista jest jawnie umieszczona w pamięci, co jest niezbę dne podczas robienia odliczania . Inaczej jest wolniejsze:
>>> timeit.Timer(stmt="range(1,1000)[::-1]").timeit()
10.801303316066111
>>> timeit.Timer(stmt="list(reversed(xrange(1,1000)))").timeit()
9.484562358901144
... i[::-1]
zajmuje więcej miejsca niż reversed
.
Na moim komputerze 'odwrócony' jest szybszy nawet dla list już w pamięci. (Sprawdź czasy w mojej edytowanej odpowiedzi.) – senderle
Należy zauważyć, że spowoduje to tymczasowe utworzenie odwróconej kopii sekwencji, natomiast 'odwróć()' będzie kopiować tylko w razie potrzeby. –
+3 do tworzenia kopii? Przepraszam, ale to zasługuje na -3 –
'L [:: - 1]:' działa szybciej niż 'odwrotnie (L)' –