2012-04-07 13 views
7

Se si dispone di una stringa, ad esempio che legge: "Ciao, come va oggi Joe?". Come posso inserire spazi all'interno di esso a intervalli regolari? Quindi per esempio voglio inserire degli spazi dentro usando la funzione range in questi passi: range (0,27,2). Così sarà simile a questa:come inserire spazi in una stringa utilizzando la funzione intervallo?

"He ll o ho w ar e yo u to da y Jo e" 

Ora ha uno spazio ad ogni secondo indice che sale alla sua fine. Come faccio a fare questo qualcuno lo sa? Grazie.

+0

Sto indovinando "Ciao" -> "Helo" è un refuso e non fa parte del risultato desiderato? –

risposta

12

L'approccio più straight-forward per questo caso particolare è

s = 'Hello how are you today Joe' 
s = " ".join(s[i:i+2] for i in range(0, len(s), 2)) 

Questa suddivide la stringa in blocchi di due caratteri ciascuna prima, e poi si unisce questi blocchi con spazi.

+0

... Sono in awe ... edit: questo non sta facendo un check per vedere se il personaggio corrente è uno spazio però; la stringa risultante potrebbe finire con doppi spazi se il carattere corrente è già uno spazio. –

+1

L'OP ha doppi spazi nel loro esempio, semplicemente non erano visibili a causa della (mancanza di) formattazione. –

+0

@Sven Marnach, cosa succede se non desidero un doppio spazio? Sono solo curioso. Penso che la tua soluzione per la sua domanda sia ottima. – George

0

Questo fa tutto!

>>> def insert_spaces(text, s_range): 
     return ' '.join(text[start:end] for start, end in 
         zip([0] + s_range, s_range + [len(text)])).strip() 

L'esempio domanda:

>>> insert_spaces('Hello how are you today Joe', range(0, 27, 2)) 
'He ll o ho w ar e yo u to da y Jo e' 

Altri esempi con diversi starts, steps e stops:

>>> insert_spaces('Hello how are you today Joe', range(5, 20, 4)) 
'Hello how are you today Joe' 
>>> insert_spaces('Hello how are you today Joe', range(0, 27)) 
'H e l l o h o w a r e y o u t o d a y J o e' 
>>> insert_spaces('abcdefghijklmnopqrstuvwxyz', range(0, 16, 5)) 
'abcde fghij klmno pqrstuvwxyz' 
1

Solo un altro modo per farlo

>>> ''.join(e if (i+1)%2 else e+" " for (i,e) in enumerate(list(s))) 
'He ll o ho w ar e yo u to da y Jo e' 
Problemi correlati