Как string.replace как только начинать с правой? -python

Как string.replace как только начинать с правой?

Я мог сделать это слева.

>>> x = 'foo bar bar' >>> x.replace(' ', ' X ', 1) 'foo X bar bar' 

Или с re.sub :

 >>> import re >>> re.sub(' ', ' X ', x, 1) 'foo X bar bar' 

Справа я мог бы сделать:

 >>> x = 'foo bar bar' >>> x[::-1].replace(' ', ' X ', 1)[::-1] 'foo bar X bar' 

Но есть ли другой способ заменить один раз, начиная с правой?

Прежде всего, я думаю, что вы подходите, это нормально. Oneliner, довольно pythonic.

Вопрос, предложенный в комментариях ( замена справа налево в Python? ), Дает несколько полезных ответов, которые их оценивают.

Один из них – тот же подход, который вы принимаете: x[::-1].replace(' ', ' X ', 1)[::-1] а другой – с rsplit и join .

Я профилировал оба, и это был результат, который я получил:

 $python -mtimeit -s "s = 'foo bar bar'" "s[::-1].replace(' ', ' X ', 1)[::-1]" 1000000 loops, best of 3: 1.18 usec per loop $python -mtimeit -s "s = 'foo bar bar'" "' X '.join(s.rsplit(' ',1))" 1000000 loops, best of 3: 0.8 usec per loop 

Поэтому моя рекомендация – второй подход, который кажется намного быстрее. При этом, в зависимости от того, что вы выбрали, поставьте комментарий рядом с сообщением # this is right replacing! потому что в любом случае довольно непонятно, что делает код 🙂

Надеюсь это поможет!