Версия split-comprehend-join:
' '.join(n+'x' if len(n)==1 else n for n in inputstr.split(' '))
Регулярное выражение:
>>> inputstr = "A' F B2 C"
>>> re.sub(r'([A-Z])(?=\s|$)', r'\1x', inputstr)
"A' Fx B2 Cx"
По сути, найдите любую заглавную букву, за которой не следует ни пробел, ни конец строки, и замените ее тем символом, за которым следует x
.
Я провел несколько тестов с timeit ; первый (составление списка), кажется, работает немного быстрее, чем второй (в среднем на 15-20% быстрее). Похоже, что это не изменится, независимо от количества замен, которые должны быть выполнены (длина строки в 10 раз по-прежнему примерно такая же, как у оригинала).