Elk teken in een string herhalen met Python

In C++ kan ik een std::stringals 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 loopconstructie,

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)

Bekijk officiële documentatie


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. xrangeis 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 xrangesuperieur.


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)

Other episodes