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.
rangeverhält es sich genauso xrangewie 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, -1um 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)
reversedin PEP-322 ist irreführend. Daher sollte beachtet werden, dass das iterable reversedaufgerufen wird __reversed__und das Ergebnis zurückgegeben wird. Für rangeObjekte ist dies ein verzögert ausgewerteter range_objectIterator. 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])
globalund timeist 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
sortedunnötig die gesamte Liste im Speicher speichert, oder? Dies ist verschwenderisch und für große nicht machbar a.