In C++, könnte ich tun:Iterieren über einen String
for (int i = 0; i < str.length(); ++i)
std::cout << str[i] << std::endl;
Wie kann ich über eine Zeichenfolge in Python durchlaufen?
In C++, könnte ich tun:Iterieren über einen String
for (int i = 0; i < str.length(); ++i)
std::cout << str[i] << std::endl;
Wie kann ich über eine Zeichenfolge in Python durchlaufen?
Wie Johannes darauf hingewiesen,
for c in "string":
#do something with c
Sie können so ziemlich alles in Python durchlaufen die for loop
Konstrukt,
zum Beispiel open("file.txt")
gibt eine Datei Objekt (und öffnet die Datei), iteriert über es iteriert über Zeilen in dieser Datei
Wenn das wie Magie scheint, ist es gut, aber die Idee dahinter ist wirklich einfach.
Es gibt ein einfaches Iterator-Protokoll, das auf alle Arten von Objekten angewendet werden kann, damit die for
-Schleife daran arbeitet.
Implementieren Sie einfach einen Iterator, der eine next()
-Methode definiert, und implementieren Sie eine __iter__
-Methode für eine Klasse, um sie iterierbar zu machen. (Die __iter__
natürlich sollte ein Iterator-Objekt zurück, das heißt, ein Objekt, das next()
definiert)
Als eine Anmerkung, umgekehrte Iteration wird archiviert mit: für c in umgekehrt ("Zeichenfolge") –
Aus welchem Teil der Dokumentation wissen Sie, dass eine Zeichenfolge ein Iterator-Typ ist? – winklerrr
dir() ein String..Sie mit siehe __iter__ Attribut. – shadow0359
Noch einfacher:
for c in "test":
print c
Nach einer Weile der Python-ing bin ich wirklich hassen C++ (Ich bin dran für einen aktuellen Universitätskurs!) – hasen
Smart-und-auf-die-Punkt-Antwort. :) – zgoda
Ich bin ein Neuling in Python. Aus irgendeinem Grund kompiliert dies nicht in meiner Umgebung, und ich musste c in Klammern setzen, damit es funktioniert: 'für c in" test ": drucken (c)' Warum? –
Nur um eine umfassende Antwort, die C Art und Weise über eine Reihe von iterieren kann in Python anwenden , wenn du einen quadratischen Pflock wirklich in ein rundes Loch zwingen willst.
Aber dann, warum, wenn Strings inhärent iterierbar sind?
for i in str:
print i
Upvoted dies, weil ich wissen musste, wie man auf das i-te Zeichen zugreift (ich bin an Java/C-Stil-String-Iterationen gewöhnt). –
Statt ersten while-Schleife, können Sie tun: for i in range (len (str)): print (str [i]) die meiner Meinung nach besser als auf eigene Faust den Zähler zu verwalten, die . Noch besser ist Marcogs Antwort mit Enumerate. – aiham
Das mag darauf beruhen, dass ich C so lange benutzt habe, aber ich benutze diese C-ish-Methode fast immer.Zum Beispiel habe ich eine Datei mit einigen 4-stelligen Zahlen verstreut, die alle mit 0 beginnen. Also muss ich eine "0" finden und sie und die nächsten 3 Zeichen ergreifen und weitergehen, ohne die Nummer zu duplizieren, wenn es welche gibt eine weitere 0 folgt ihm. Keine der Methoden "für c in str" oder "für i, c in enumerate (str)" funktioniert, weil ich die Kontrolle über den Index benötige. Ich bin mir sicher, dass ein regulärer Ausdruck viel besser wäre. – gkimsey
Wenn Sie den Zugriff auf den Index benötigen, wie Sie durch den String iterieren, verwenden enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
+1 für die Indexoption – dopplesoldner
thanx. das Erhalten des Indexes war die Sache, die ich suchte –
Profi-Tipp: Es beginnt bei Null. Wenn Sie es von einem starten müssen: '1 t',' 2 e', '3 s',' 4 t' benutzen Sie den Parameter "start": 'für i, c in enumerate ('test', start = 1) ' – Messa
Wenn Sie einen funktionalen Ansatz verwenden möchten einen String (vielleicht iterieren zu verwandeln es irgendwie), können Sie die Zeichenkette in Zeichen aufteilen, wenden Sie eine Funktion auf jedes an und verbinden Sie dann die resultierende Liste der Zeichen zurück in eine Zeichenkette.
Eine Zeichenkette ist inhärent eine Liste von Zeichen, daher wird 'map' über die Zeichenkette - als zweites Argument - die Funktion - das erste Argument - anwenden.
Zum Beispiel, hier verwende ich einen einfachen Lambda-Ansatz, da alles, was ich tun möchte, eine triviale Änderung den Charakter ist: hier, jedes Zeichen Wert zu erhöhen:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
oder allgemeiner:
>>> ''.join(map(my_function, my_string))
Dabei nimmt my_function einen char-Wert an und gibt einen char-Wert zurück.
Nun, Sie auch etwas Interessantes wie dies tun können und Ihre Arbeit tun, indem for-Schleife
#suppose you have variable name
name = "Mr.Suryaa"
for index in range (len (name)):
print (name[index]) #just like c and c++
Antwort ist
M r. S uryaa
jedoch seit range() eine Liste der Werte schaffen, die Sequenz so ist, dass Sie direkt den Namen
for e in name:
print(e)
Dies erzeugt auch das gleiche Ergebnis und auch besser aussieht und funktioniert mit jeder beliebigen Reihenfolge verwenden können, wie Liste, Tupel und Wörterbuch.
Wir Schlepptau in Funktionen (BIF in Python Gemeinschaft) Errichtet verwendet haben
1) range() - Bereich() BIF wird verwendet, Indizes zu erstellen Beispiel
for i in range (5) :
can produce 0 , 1 , 2 , 3 , 4
2) len() - len() BIF wird verwendet, um die Länge der gegebenen Zeichenfolge zu ermitteln
Mehrere Antworten hier verwenden range
. xrange
ist im Allgemeinen besser, da es einen Generator zurückgibt, anstatt eine vollständig instanziierte Liste. Wenn Speicher und/oder Iterables mit stark variierenden Längen ein Problem darstellen können, ist xrange
überlegen.
Warum der Downvote, isnt "Wie wiederhole ich eine Zeichenfolge in Python?" eine vollkommen gute Programmierfrage? – Jonas
Stackoverflow ist nicht ausschließlich für fortgeschrittene Fragen gedacht. Upvoted. –
Ich stimme Upchurch zu. Ich habe mir Python mit verschiedenen Web-Tutorials beigebracht und wusste nicht, dass Sie das tun könnten. Upvoted. – mtruesdell