Iterare su una corda

In C ++, posso scorrere su una std::string come questa:

 std::string str = "Hello World!"; for (int i = 0; i < str.length(); ++i) { std::cout << str[i] << std::endl; } 

Come faccio a scorrere su una stringa in Python?

Come ha sottolineato Johannes,

 for c in "string": #do something with c 

Puoi scorrere praticamente qualsiasi cosa in python usando il costrutto for loop ,

per esempio, open("file.txt") restituisce un object file (e apre il file), scorrendo su di esso itera su linee in quel file

 for line in open(filename): # do something with line 

Se ciò sembra magico, beh è un po ‘, ma l’idea alla base è davvero semplice.

C’è un semplice protocollo iteratore che può essere applicato a qualsiasi tipo di object per far funzionare il ciclo for su di esso.

È sufficiente implementare un iteratore che definisce un metodo next() e implementare un metodo __iter__ su una class per renderlo iterabile. (il __iter__ ovviamente dovrebbe restituire un object iteratore, cioè un object che definisce next() )

Vedi la documentazione ufficiale

Se è necessario accedere all’indice mentre si esegue l’iterazione attraverso la stringa, utilizzare enumerate() :

 >>> for i, c in enumerate('test'): ... print i, c ... 0 t 1 e 2 s 3 t 

Ancora più semplice:

 for c in "test": print c 

Solo per fare una risposta più completa, il modo C di iterare su una stringa può applicarsi in Python, se vuoi davvero forzare un piolo quadrato in un buco rotondo.

 i = 0 while i < len(str): print str[i] i += 1 

Ma poi di nuovo, perché farlo quando le stringhe sono intrinsecamente iterabili?

 for i in str: print i 

Se si desidera utilizzare un approccio più funzionale per iterare su una stringa (forse per trasformarlo in qualche modo), è ansible dividere la stringa in caratteri, applicare una funzione a ciascuno, quindi unire l’elenco risultante di caratteri in una stringa.

Una stringa è intrinsecamente un elenco di caratteri, quindi ‘mappa’ itererà sulla stringa – come secondo argomento – applicando la funzione – il primo argomento – a ciascuno.

Ad esempio, qui utilizzo un semplice approccio lambda poiché tutto quello che voglio fare è una modifica banale al personaggio: qui, per incrementare ogni valore di carattere:

 >>> ''.join(map(lambda x: chr(ord(x)+1), "HAL")) 'IBM' 

o più in generale:

 >>> ''.join(map(my_function, my_string)) 

dove my_function accetta un valore char e restituisce un valore char.

Diverse risposte qui usano range . xrange è generalmente migliore in quanto restituisce un generatore, piuttosto che un elenco completamente istanziato. Laddove la memoria e / o iterabili di lunghezze ampiamente variabili possono essere un problema, xrange è superiore.

Bene, puoi anche fare qualcosa di interessante come questo e fare il tuo lavoro usando for loop

 #suppose you have variable name name = "Mr.Suryaa" for index in range ( len ( name ) ): print ( name[index] ) #just like c and c++ 

La risposta è

Sig . Suryaa

Comunque dato che range () crea una lista dei valori che è una sequenza, puoi usare direttamente il nome

 for e in name: print(e) 

Questo produce anche lo stesso risultato e anche un aspetto migliore e funziona con qualsiasi sequenza come lista, tupla e dizionario.

Abbiamo usato le funzioni incorporate di rimorchio (BIF in Python Community)

1) range () – range () BIF è usato per creare indici Esempio

 for i in range ( 5 ) : can produce 0 , 1 , 2 , 3 , 4 

2) len () – len () BIF viene usato per scoprire la lunghezza della stringa data