Есть более простой способ сделать следующее:Другие способы замены одного символа
def replace(txt,pos,new_char):
return txt[:pos] + new_char + txt[pos+1:]
сделать следующее?
>>> replace('12345',2,'b')
'12b45'
Есть более простой способ сделать следующее:Другие способы замены одного символа
def replace(txt,pos,new_char):
return txt[:pos] + new_char + txt[pos+1:]
сделать следующее?
>>> replace('12345',2,'b')
'12b45'
Просто испытано несколько решений, чтобы найти лучшую производительность,
Источник тестер код был:
import __main__
from itertools import permutations
from time import time
def replace1(txt, pos, new_char):
return txt[:pos] + new_char + txt[pos+1:]
def replace2(txt, pos, new_char):
return '{0}{1}{2}'.format(txt[:pos], new_char, txt[pos+1:])
def replace3(txt, pos, new_char):
return ''.join({pos: new_char}.get(idx, c) for idx, c in enumerate(txt))
def replace4(txt, pos, new_char):
txt = list('12345')
txt[pos] = new_char
''.join(txt)
def replace5(txt, pos, new_char):
return '%s%s%s' % (txt[:pos], new_char, txt[pos+1:])
words = [''.join(x) for x in permutations('abcdefgij')]
for i in range(1, 6):
func = getattr(__main__, 'replace{}'.format(i))
start = time()
for word in words:
result = func(word, 2, 'X')
print time() - start
И это результат:
0.233116149902
0.409259080887
2.64006495476
0.612321138382
0.302225828171
Ухаживать за поддержкой с некоторыми измерениями? –
@PavelAnossov Я пытаюсь создать одну новую строку вместо двух, Нет? – MostafaR
Нет, он создает строку формата, два среза и результат. Замена OP создает два среза, временный результат конкатенации и результат, так что четыре на четыре. –
Не уверен, что " лучше ", но альтернативой является адаптировать что-то вроде следующего:
>>> ''.join({2: 'b', 4: 'x'}.get(idx, c) for idx, c in enumerate(s))
'12b4x'
Не уверен, если это проще:
>>> txt = list('12345')
>>> txt[2] = 'b'
>>> ''.join(txt)
'12b45'
Почему наклоняю вы используете заменить? – Harpal
Я не могу придумать ничего лучшего в общем случае. Чего вы пытаетесь достичь именно? –
Обратите внимание, что если вы пишете, чтобы создать лучшую ставку, возможно, вам не нужно создавать новую строку и просто передать отдельные части в 'your_file.write (piece)'. –