2016-02-19 2 views
-2

Я пытаюсь append символ в строке после каждых трех символов Например, если моя строка NYCLHRNYC результат будет NYC-LHR-NYC Длина строки всегда кратна 3Python: String Manipulation

Я написал следующий код:

x = raw_input("Enter the route") 
print "Route: %s" %x 
length = len(x) 
print length 
if length == 6: 
    newx= x[0:3] +"-"+ x[3:6] 
elif length == 9: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] 
elif length == 12: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12] 
elif length == 15: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15] 
elif length == 18: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15]+"-"+ x[15:18] 
elif length == 21: 
    newx= x[0:3] +"-"+ x[3:6] +"-"+ x[6:9] +"-"+ x[9:12]+"-"+ x[12:15]+"-"+ x[15:18]+"-"+ x[18:21] 
print "After formattinng: %s" %newx 

Теперь это очень механический способ сделать это. В большинстве случаев я не знал бы максимальную длину строки. Есть ли лучший способ сделать это с помощью for loop или еще чего-нибудь?

Заранее благодарим за ответы.

+1

так написать метод, который форматирует вашу строку (дать метод параметр вашей длины) и с немного математики, вы можете получить его работу;) –

ответ

13

Это очень просто:

newx = "-".join(x[i:i+3] for i in range(0, len(x), 3)) 
+0

Wow его удивительные, чтобы иметь эта вещь только в одной строке кода. Огромное спасибо. Я думал, что должен сделать это с помощью цикла for. –

+1

Также можно сделать это с помощью re: 're.sub ('. {3}', '\ g <0> -', x)' Это имеет (возможно, нежелательный) эффект добавления '-' после последней группы из трех символов, если общее число символов кратно 3 ... – jfsturtz

+0

@jfsturtz: Это определенно нежелательный эффект, потому что OP упомянул, что длина строки всегда кратная 3, но всегда можно использовать строку .strip ("-") '. – zondo