Ich versuche, eine Schleife von 100 auf 0 zu erstellen. Wie mache ich das in Python?
for i in range (100,0)
funktioniert nicht
range(100)[::-1]
(was automatisch übersetzt wird range(9, -1, -1)
) - Getestet in Python 3.7
Ich versuche, eine Schleife von 100 auf 0 zu erstellen. Wie mache ich das in Python?
for i in range (100,0)
funktioniert nicht
range(100)[::-1]
(was automatisch übersetzt wird range(9, -1, -1)
) - Getestet in Python 3.7
Antworten:
Versuchen Sie range(100,-1,-1)
, das dritte Argument ist das zu verwendende Inkrement ( hier dokumentiert ).
("Range" -Optionen, Start, Stopp, Schritt sind hier dokumentiert )
Meiner Meinung nach ist dies am besten lesbar:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
es vor xrange(len(list)-1:-1:-1)
; Letzteres sieht bei so vielen einfach komisch aus -1
.
range
verhält es sich genauso xrange
wie in 2.7. @hacksoi hängt vom Anwendungsfall ab, aber nehmen wir an, Sie iterieren in einem großen Puffer rückwärts, sagen wir, es sind 10 MB. Dann würde das Erstellen der umgekehrten Indizes im Voraus Sekunden dauern und über 50 MB Speicher verbrauchen. Die Verwendung eines umgekehrten Generators würde Millisekunden dauern und nur wenige Bytes Speicher verbrauchen.
Warum Ihr Code nicht funktioniert hat
Ihr Code for i in range (100, 0)
ist in Ordnung, außer
Der dritte Parameter ( step
) ist standardmäßig +1
. Sie müssen also den dritten Parameter für range () angeben, -1
um einen Schritt zurück zu machen.
for i in range(100, -1, -1):
print(i)
HINWEIS: Dies beinhaltet 100 & 0 in der Ausgabe.
Es gibt mehrere Möglichkeiten.
Besserer Weg
Überprüfen Sie für pythonische Weise PEP 0322 .
Dies ist ein Python3-Python-Beispiel zum Drucken von 100 bis 0 (einschließlich 100 und 0).
for i in reversed(range(101)):
print(i)
reversed
in PEP-322 ist irreführend. Daher sollte beachtet werden, dass das iterable reversed
aufgerufen wird __reversed__
und das Ergebnis zurückgegeben wird. Für range
Objekte ist dies ein verzögert ausgewerteter range_object
Iterator. Kurzum: Die Verwendung dieser Methode ist immer noch eine träge Bewertung.
Die einfache Antwort zur Lösung Ihres Problems könnte folgendermaßen aussehen:
for i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
funktioniert
Ich habe dies in einer der Codeacademy-Übungen versucht (Zeichen in einer Zeichenfolge umkehren, ohne umgekehrt oder :: -1 zu verwenden)
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')
Ich wollte zwei Listen gleichzeitig rückwärts durchlaufen, also brauchte ich den negativen Index. Das ist meine Lösung:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Ergebnis:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh, okay, lesen Sie die Frage falsch, ich denke, es geht darum, in einem Array rückwärts zu gehen? wenn ja, habe ich folgendes:
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
und time
ist für die ursprüngliche Frage nicht relevant.
Sie können auch einen benutzerdefinierten Umkehrmechanismus in Python erstellen. Welches kann überall verwendet werden, um eine iterable rückwärts zu schleifen
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
unnötig die gesamte Liste im Speicher speichert, oder? Dies ist verschwenderisch und für große nicht machbar a
.