Próbuję zapętlić od 100 do 0. Jak to zrobić w Pythonie?
for i in range (100,0)
nie działa
range(100)[::-1]
(co jest automatycznie tłumaczone range(9, -1, -1)
) - Testowane w pythonie 3.7
Próbuję zapętlić od 100 do 0. Jak to zrobić w Pythonie?
for i in range (100,0)
nie działa
range(100)[::-1]
(co jest automatycznie tłumaczone range(9, -1, -1)
) - Testowane w pythonie 3.7
Odpowiedzi:
Spróbuj range(100,-1,-1)
, trzeci argument to przyrost użycia (udokumentowany tutaj ).
(opcje „zakres”, start, stop, krok są udokumentowane tutaj )
Moim zdaniem jest to najbardziej czytelny:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
się xrange(len(list)-1:-1:-1)
; ten ostatni wygląda dziwnie z tyloma -1
.
range
zachowuje się tak samo jakxrange
w 2.7. @ hacksoi zależy od przypadku użycia, ale powiedzmy, że iterujesz wstecz w dużym buforze, powiedzmy, że to 10 MB, a następnie utworzenie wcześniejszych indeksów zajmie kilka sekund i zużyje ponad 50 MB pamięci. Użycie odwróconego generatora zajmie milisekundy i zużyje tylko kilka bajtów pamięci.
Dlaczego twój kod nie działał
Twój kod for i in range (100, 0)
jest w porządku, z wyjątkiem
trzeci parametr ( step
) jest domyślnie +1
. Musisz więc podać trzeci parametr do range () jako -1
krok wstecz.
for i in range(100, -1, -1):
print(i)
UWAGA: Obejmuje to 100 i 0 na wyjściu.
Istnieje wiele sposobów.
Lepszy sposób
W przypadku pythonicznego sposobu sprawdź PEP 0322 .
To jest pythonowy przykład Pythona do drukowania od 100 do 0 (w tym 100 i 0).
for i in reversed(range(101)):
print(i)
reversed
w PEP-322 jest mylące, dlatego należy zauważyć, że reversed
wywoła __reversed__
iterowalny i zwróci wynik, a dla range
obiektów jest to leniwy oceniany range_object
iterator. W skrócie: korzystanie z tej metody jest nadal leniwą oceną.
Prosta odpowiedź na rozwiązanie problemu może wyglądać następująco:
for i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
Pracuje
Próbowałem tego w jednym z ćwiczeń w codeacademy (odwracanie znaków w ciągu bez użycia odwróconego ani :: -1)
def reverse(text):
chars= []
l = len(text)
last = l-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Chciałem jednocześnie przeglądać dwie listy wstecz, więc potrzebowałem indeksu ujemnego. To jest moje rozwiązanie:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Wynik:
-1 2
-2 5
-3 4
-4 3
-5 1
No dobrze, źle przeczytaj pytanie. Chyba chodzi o cofanie się w tablicy? jeśli tak, mam to:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
i time
nie ma znaczenia dla pierwszego pytania.
Możesz również utworzyć niestandardowy mechanizm odwrotny w Pythonie. Którego można używać w dowolnym miejscu do zapętlania iterowalnego wstecz
class Reverse:
"""Iterator for looping over a sequence backwards"""
def __init__(self, seq):
self.seq = seq
self.index = len(seq)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
niepotrzebnie zapisze całą listę w pamięci, prawda? Jest to marnotrawstwo i nie jest wykonalne dla dużych a
.