2012-04-07 14 views
7

Jeśli mam ciąg znaków, na przykład, który brzmi: "Cześć, jak się masz dzisiaj Joe" Jak mogę wstawiać do niego spacje w regularnych odstępach czasu? Na przykład chcę wstawić do niego spacje, używając funkcji range w tych krokach: range (0,27,2). Tak będzie wyglądać następująco:Jak wstawić spacje do łańcucha za pomocą funkcji zakresu?

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

Ma teraz miejsce na co drugim indeksie aż do końca. Jak to zrobić, czy ktoś wie? dzięki.

+0

Zgaduję "Hello" -> "Helo" jest literówką, a nie częścią pożądanego rezultatu? –

Odpowiedz

12

Najbardziej prosta podejście do tego konkretnego przypadku jest

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

ten dzieli ciąg na kawałki dwóch znaków każdy pierwszy, a następnie łączy się te kawałki ze spacjami.

+0

... Jestem przerażony ... edit: to nie robi czeku, żeby sprawdzić, czy obecny znak jest przestrzenią; wynikowy ciąg może kończyć się podwójnymi spacjami, jeśli aktualny znak jest już spacją. –

+1

OP ma podwójne spacje w ich przykładzie, po prostu nie były widoczne z powodu (braku) formatowania. –

+0

@Sven Marnach, Co się stanie, jeśli nie chcę podwójnej przestrzeni? Jestem po prostu ciekaw. Myślę, że twoje rozwiązanie dla jego pytania jest świetne. – George

0

To robi wszystko!

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

Przykład pytanie:

>>> 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' 

Inne przykłady z różnych starts, steps i 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

Kolejny sposób to zrobić

>>> ''.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' 
Powiązane problemy