Замена одного символа строки в Python - PullRequest
9 голосов
/ 30 января 2010

В python являются ли строки изменяемыми? Строка someString[3] = "a" выдает ошибку

TypeError: объект 'str' не назначение предмета поддержки

Я понимаю, почему (как я мог бы написать someString [3] = "test", и это, очевидно, было бы незаконно), но есть ли способ сделать это в python?

Ответы [ 4 ]

16 голосов
/ 30 января 2010

Строки Python являются неизменяемыми, и поэтому они не поддерживают назначение элементов или фрагментов. Вам нужно будет создать новую строку, используя, например, someString[:3] + 'a' + someString[4:] или другой подходящий подход.

8 голосов
/ 30 января 2010

Вместо сохранения вашего значения в виде строки, вы можете использовать список символов:

>>> l = list('foobar')
>>> l[3] = 'f'
>>> l[5] = 'n'

Затем, если вы хотите преобразовать его обратно в строку для отображения, используйте это:

>>> ''.join(l)
'foofan'

Если вы меняете много символов по одному, этот метод будет значительно быстрее создания новой строки при каждом изменении символа.

2 голосов
/ 30 января 2010

В достаточно новых питонах вы также можете использовать встроенный тип bytearray, который является изменяемым. Смотрите документацию stdlib. Но «достаточно новый» здесь означает 2,6 или выше, так что это не обязательно вариант.

В старых питонах вы должны создать новый str, как упоминалось выше, так как они неизменны. Обычно это наиболее читаемый подход, но иногда имеет смысл использовать другой тип изменяемой последовательности (например, список символов или, возможно, array.array). array.array немного неуклюжий, и обычно его избегают.

1 голос
/ 03 октября 2014
>>> import ctypes
>>> s = "1234567890"
>>> mutable = ctypes.create_string_buffer(s)
>>> mutable[3] = "a"
>>> print mutable.value
123a567890
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...