Как напечатать строку таким образом - PullRequest
4 голосов
/ 14 июня 2010

Для каждой строки мне нужно напечатать # каждые 6 символов.

Например:

example_string = "this is an example string. ok ????"

myfunction(example_string)

"this i#s an e#xample# strin#g. ok #????"

Какой самый эффективный способ сделать это?

Ответы [ 3 ]

9 голосов
/ 14 июня 2010

Как насчет этого?

'#'.join( [example_string[a:a+6] for a in range(0,len(example_string),6)])

Он тоже работает довольно быстро. На моей машине пять микросекунд на строку из 100 символов:

>>> import timeit
>>> timeit.Timer( "'#'.join([s[a:a+6] for a in range(0,len(s),6)])", "s='x'*100").timeit()
4.9556539058685303
4 голосов
/ 14 июня 2010
>>> str = "this is an example string. ok ????"
>>> import re
>>> re.sub("(.{6})", r"\1#", str)
'this i#s an e#xample# strin#g. ok #????'

Обновление:
Обычно точка соответствует всем символам, кроме новых строк.Используйте re.S, чтобы точка соответствовала всем символам, включая символы новой строки.

>>> pattern = re.compile("(.{6})", re.S)
>>> str = "this is an example string with\nmore than one line\nin it. It has three lines"
>>> print pattern.sub(r"\1#", str)

this i#s an e#xample# strin#g with#
more #than o#ne lin#e
in i#t. It #has th#ree li#nes

2 голосов
/ 14 июня 2010
import itertools

def every6(sin, c='#'):
  r = itertools.izip_longest(*([iter(sin)] * 6 + [c * (len(sin) // 6)]))
  return ''.join(''.join(y for y in x if y is not None) for x in r)

print every6(example_string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...