In C++ kan ik een std::string
als volgt herhalen:
std::string str = "Hello World!";
for (int i = 0; i < str.length(); ++i)
{
std::cout << str[i] << std::endl;
}
Hoe herhaal ik een string in Python?
Antwoord 1, autoriteit 100%
Zoals Johannes opmerkte,
for c in "string":
#do something with c
Je kunt vrijwel alles herhalen in python met behulp van de for loop
constructie,
bijvoorbeeld open("file.txt")
retourneert een bestandsobject (en opent het bestand), itereren eroverheen itereert over regels in dat bestand
with open(filename) as f:
for line in f:
# do something with line
Als dat magie lijkt, dan is het dat eigenlijk wel, maar het idee erachter is heel eenvoudig.
Er is een eenvoudig iteratorprotocol dat op elk soort object kan worden toegepast om de for
-lus erop te laten werken.
Implementeer eenvoudig een iterator die een next()
methode definieert, en implementeer een __iter__
methode op een klasse om deze itereerbaar te maken. (de __iter__
moet natuurlijk een iteratorobject retourneren, dat wil zeggen een object dat next()
definieert)
Antwoord 2, autoriteit 69%
Als je toegang tot de index nodig hebt terwijl je de string doorloopt, gebruik je enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
Antwoord 3, autoriteit 20%
Nog eenvoudiger:
for c in "test":
print c
Antwoord 4, autoriteit 8%
Om een uitgebreider antwoord te geven: de C-manier van itereren over een string kan in Python worden toegepast, als je echt een vierkante pen in een rond gat wilt forceren.
i = 0
while i < len(str):
print str[i]
i += 1
Maar nogmaals, waarom zou je dat doen als strings inherent itereerbaar zijn?
for i in str:
print i
Antwoord 5
Nou, je kunt ook zoiets interessants doen en je werk doen door for loop te gebruiken
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
Antwoord is
Mr. S u r y a a
Sinds range() een lijst met waarden maakt die een reeks is, kunt u de naam direct gebruiken
for e in name:
print(e)
Dit levert ook hetzelfde resultaat op en ziet er ook beter uit en werkt met elke reeks zoals lijst, tuple en woordenboek.
We hebben gebruik gemaakt van ingebouwde functies (BIF’s in Python Community)
1) range() – range() BIF wordt gebruikt om indexen te maken
Voorbeeld
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len() – len() BIF wordt gebruikt om de lengte van een gegeven string te achterhalen
Antwoord 6
Als u een meer functionele benadering wilt gebruiken om over een tekenreeks te itereren (misschien om het op de een of andere manier te transformeren), kunt u de tekenreeks in tekens splitsen, op elk teken een functie toepassen en vervolgens de resulterende lijst met tekens weer toevoegen aan een tekenreeks.
Een string is inherent een lijst met karakters, daarom zal ‘map’ de string herhalen – als tweede argument – waarbij de functie – het eerste argument – op elk wordt toegepast.
Hier gebruik ik bijvoorbeeld een eenvoudige lambda-benadering, omdat ik alleen een triviale wijziging aan het teken wil doen: hier, om elke tekenwaarde te verhogen:
>>> ''.join(map(lambda x: chr(ord(x)+1), "HAL"))
'IBM'
of meer algemeen:
>>> ''.join(map(my_function, my_string))
waarbij my_function een char-waarde neemt en een char-waarde retourneert.
Antwoord 7
Verschillende antwoorden hier gebruiken range
. xrange
is over het algemeen beter omdat het een generator retourneert in plaats van een volledig geïnstantieerde lijst. Waar geheugen en/of iterables van sterk variërende lengte een probleem kunnen zijn, is xrange
superieur.
Antwoord 8
U kunt ook het volgende doen:
txt = "Hello World!"
print (*txt, sep='\n')
Dit maakt geen gebruik van lussen, maar intern zorgt het printstatement ervoor.
*
pakt de string uit in een lijst en stuurt deze naar de printopdracht
sep='\n'
zorgt ervoor dat het volgende teken op een nieuwe regel wordt afgedrukt
De uitvoer zal zijn:
H
e
l
l
o
W
o
r
l
d
!
Als u een lusverklaring nodig heeft, dan hebben u zoals anderen al gezegd, u een voor lus als volgt gebruikt:
for x in txt: print (x)