BTW, prawdopodobnie chcesz zapętlić od 99 do 0, a rzadko od 100 do 0. To wpływa na odpowiedzi.
Acumenus,
1
@Acumenus Właśnie tego szukałem po dotarciu tutaj. Dla przypomnienia, rozwiązaniem jest po prostu napisanie: range(100)[::-1](co jest automatycznie tłumaczone range(9, -1, -1)) - Testowane w pythonie 3.7
Hassan
Odpowiedzi:
399
Spróbuj range(100,-1,-1), trzeci argument to przyrost użycia (udokumentowany tutaj ).
(opcje „zakres”, start, stop, krok są udokumentowane tutaj )
Muszę również użyć tego, aby usunąć elementy z kolekcji, dlatego właśnie chciałem indeksów.
Joan Venge
2
drugi argument jest o jeden mniejszy niż wartość końcowa. więc jeśli umieścisz -1, to zakres zatrzyma się na 0, jeśli umieścisz -5, zakres zatrzyma się na -4 (dla przyrostu -1)
Jest to lepsze niż zaakceptowana odpowiedź, ponieważ w rzeczywistości nie przydziela wszystkich liczb w pamięci (w Pythonie 3 zaakceptowana odpowiedź też nie), a ponadto jest bardziej oczywiste, co się dzieje.
Blixt
5
Python przed wersją 2.6 nie przydziela wszystkich liczb, ponieważ odwrócone nie ma sposobu, aby xrange cofnął się ... (Od Python 2.6 wywołuje __reversed __ ().)
Robert Siemer
Wolę reversed(xrange(len(list)))się xrange(len(list)-1:-1:-1); ten ostatni wygląda dziwnie z tyloma -1.
musiphil
1
xrange () nie jest już dostępny w Pythonie 3
Chris Graf,
1
W Python 3 rangezachowuje 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.
Blixt,
34
for i in range(100,-1,-1)
i niektóre nieco dłuższe (i wolniejsze) rozwiązanie:
for i in reversed(range(101))for i in range(101)[::-1]
tak, PEP-322 daje nam jasny i najmniej podatny na błędy sposób na odwrócenie iteracji.
Allen Shen
1
To jest dobre. Zalecenie dotyczące sposobu implementacji reversedw PEP-322 jest mylące, dlatego należy zauważyć, że reversedwywoła __reversed__iterowalny i zwróci wynik, a dla rangeobiektów jest to leniwy oceniany range_objectiterator. W skrócie: korzystanie z tej metody jest nadal leniwą oceną.
Ruzihm
5
Inne rozwiązanie:
z =10for x in range (z):
y = z-x
print y
Wynik:
10987654321
Wskazówka: Jeśli używasz tej metody do odliczania indeksów na liście, będziesz chciał -1 od wartości „y”, ponieważ indeksy listy zaczną się od 0.
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-1for i in range (l):
chars.append(text[last])
last-=1
result=""for c in chars:
result += c
return result
print reverse('hola')
Wygląda na to, że twoją odpowiedzią jest wklej kopię wykonanego testu. Spróbuj opublikować minimalny przykład: użycie globali timenie ma znaczenia dla pierwszego pytania.
Michael Doubez
-1
Możesz również utworzyć niestandardowy mechanizm odwrotny w Pythonie. Którego można używać w dowolnym miejscu do zapętlania iterowalnego wstecz
classReverse:"""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:raiseStopIteration
self.index -=1return self.seq[self.index]>>> d =[1,2,3,4,5]>>>for i inReverse(d):...print(i)...54321
Witamy w Stack Overflow! Rozważ edycję swojego posta, aby dodać więcej wyjaśnień na temat tego, co robi Twój kod i dlaczego rozwiąże problem. Odpowiedź, która w większości zawiera tylko kod (nawet jeśli działa), zwykle nie pomaga OP zrozumieć jego problemu.
SuperBiasedMan
Zdajesz sobie sprawę, że używanie sortedniepotrzebnie zapisze całą listę w pamięci, prawda? Jest to marnotrawstwo i nie jest wykonalne dla dużych a.
range(100)[::-1]
(co jest automatycznie tłumaczonerange(9, -1, -1)
) - Testowane w pythonie 3.7Odpowiedzi:
Spróbuj
range(100,-1,-1)
, trzeci argument to przyrost użycia (udokumentowany tutaj ).(opcje „zakres”, start, stop, krok są udokumentowane tutaj )
źródło
Moim zdaniem jest to najbardziej czytelny:
źródło
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.i niektóre nieco dłuższe (i wolniejsze) rozwiązanie:
źródło
Ogólnie w Pythonie można używać indeksów ujemnych, aby rozpocząć od tyłu:
Wynik:
źródło
Dlaczego twój kod nie działał
Twój kod
for i in range (100, 0)
jest w porządku, z wyjątkiemtrzeci parametr (
step
) jest domyślnie+1
. Musisz więc podać trzeci parametr do range () jako-1
krok wstecz.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).
źródło
reversed
w PEP-322 jest mylące, dlatego należy zauważyć, żereversed
wywoła__reversed__
iterowalny i zwróci wynik, a dlarange
obiektów jest to leniwy ocenianyrange_object
iterator. W skrócie: korzystanie z tej metody jest nadal leniwą oceną.Inne rozwiązanie:
Wynik:
Wskazówka: Jeśli używasz tej metody do odliczania indeksów na liście, będziesz chciał -1 od wartości „y”, ponieważ indeksy listy zaczną się od 0.
źródło
Prosta odpowiedź na rozwiązanie problemu może wyglądać następująco:
źródło
for var in range(10,-1,-1)
Pracujeźródło
Krótkie i słodkie. To było moje rozwiązanie podczas kursu CodeAcademy. Drukuje ciąg w kolejności rev.
źródło
Zawsze możesz zwiększyć zakres i odjąć od zmiennej w twoim przypadku, w
100 - i
którymi in range( 0, 101 )
.źródło
Próbowałem tego w jednym z ćwiczeń w codeacademy (odwracanie znaków w ciągu bez użycia odwróconego ani :: -1)
źródło
Chciałem jednocześnie przeglądać dwie listy wstecz, więc potrzebowałem indeksu ujemnego. To jest moje rozwiązanie:
Wynik:
źródło
No dobrze, źle przeczytaj pytanie. Chyba chodzi o cofanie się w tablicy? jeśli tak, mam to:
źródło
global
itime
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
źródło
źródło
sorted
niepotrzebnie zapisze całą listę w pamięci, prawda? Jest to marnotrawstwo i nie jest wykonalne dla dużycha
.