Переменные строки в Python

Пожалуйста, знаете ли вы о библиотеке Python, которая предоставляет изменяемые строки? Google вернул на удивление мало результатов. Единственная используемая библиотека, которую я нашел, это http://code.google.com/p/gapbuffer/, которая находится на C, но я бы предпочел, чтобы она была написана на чистом Python.

Редактировать: Спасибо за ответы, но после эффективной библиотеки. То есть, ''.join(list) может работать, но я надеялся на что-то более оптимизированное. Кроме того, он должен поддерживать обычные обычные строки, например regex и unicode.

  • ChoiceField не отображает пустую метку при использовании кортежа
  • Как определить, идентичны ли два раздела (кластеризации) точек данных?
  • Ресурс «corpora / wordnet» не найден на Heroku
  • найти максимум за столбец значений, которые приходят до минимума
  • Python decimal.Decimal id не то же самое
  • Всесторонний учебник для начинающих?
  • Как я могу проверить синтаксис скрипта Python без его выполнения?
  • Python получает значения всего часа между двумя объектами datetime
  • 4 Solutions collect form web for “Переменные строки в Python”

    В Python изменяемый тип последовательности – bytearray * см. Эту ссылку

    Это позволит вам эффективно изменять символы в строке. Хотя вы не можете изменить длину строки.

     >>> import ctypes >>> a = 'abcdefghijklmn' >>> mutable = ctypes.create_string_buffer(a) >>> mutable[5:10] = ''.join( reversed(list(mutable[5:10].upper())) ) >>> a = mutable.value >>> print `a, type(a)` ('abcdeJIHGFklmn', <type 'str'>) 
     class MutableString(object): def __init__(self, data): self.data = list(data) def __repr__(self): return "".join(self.data) def __setitem__(self, index, value): self.data[index] = value def __getitem__(self, index): if type(index) == slice: return "".join(self.data[index]) return self.data[index] def __delitem__(self, index): del self.data[index] def __add__(self, other): self.data.extend(list(other)) def __len__(self): return len(self.data) 

    … и так далее и тому подобное.

    Вы также можете подклассифицировать StringIO, buffer или bytearray.

    Как насчет простого list подкласса (главный пример для изменчивости в Python)?

     class CharList(list): def __init__(self, s): list.__init__(self, s) @property def list(self): return list(self) @property def string(self): return "".join(self) def __setitem__(self, key, value): if isinstance(key, int) and len(value) != 1: cls = type(self).__name__ raise ValueError("attempt to assign sequence of size {} to {} item of size 1".format(len(value), cls)) super(CharList, self).__setitem__(key, value) def __str__(self): return self.string def __repr__(self): cls = type(self).__name__ return "{}(\'{}\')".format(cls, self.string) 

    Это только присоединяет список к строке, если вы хотите ее распечатать или активно запрашивать строковое представление. Мутирование и расширение тривиально, и пользователь знает, как это сделать, поскольку это всего лишь список.

    Пример использования:

     s = "te_st" c = CharList(s) c[1:3] = "oa" c += "er" print c # prints "toaster" print c.list # prints ['t', 'o', 'a', 's', 't', 'e', 'r'] 

    Исправлено следующее: см. Обновление ниже.

    Существует одно (разрешимое) предостережение: нет проверки (пока), что каждый элемент действительно является персонажем. По крайней мере, он будет печатать для всех, кроме строк. Однако они могут быть объединены и могут вызвать такие странные ситуации, как это: [см. Пример кода ниже]

    С помощью пользовательского __setitem__ , присваивая строку length! = 1 элементу CharList, вы повысите ValueError . Все остальное можно по-прежнему свободно назначать, но будет поднимать элемент TypeError: sequence item n: expected string, X found при печати, из-за операции string.join() . Если это недостаточно, дальнейшие проверки могут быть легко добавлены (возможно, также в __setslice__ или путем переключения базового класса на collections.Sequence __setslice__ (производительность может отличаться ?!), см. Здесь )

     s = "test" c = CharList(s) c[1] = "oa" # with custom __setitem__ a ValueError is raised here! # without custom __setitem__, we could go on: c += "er" print c # prints "toaster" # this looks right until here, but: print c.list # prints ['t', 'oa', 's', 't', 'e', 'r'] 
    Interesting Posts

    Как создать инкрементный идентификатор в классе Python

    Как я могу получить публичный IP-адрес с помощью python2.7?

    Отключить кэширование статических файлов на сервере разработки Django

    Как выполнить предварительную выборку данных с помощью пользовательской функции python в тензорном потоке

    Анализатор метаданных документа на основе Python?

    Захват видеоданных с экрана в Python

    Выполнение программ командной строки из python

    Как я могу векторизовать усреднение 2×2 суб-массивов массива numpy?

    Пользовательское дополнение для сверток в TensorFlow

    Инициализация списка Python с использованием операторов множественного диапазона

    feedparser выходит из строя во время запуска скрипта, но не может воспроизводиться в интерактивной консоли python

    словарь из csv-файла python

    В чем разница между типом .__ getattribute__ и объектом .__ getattribute__?

    MongoEngine Аутентификация пользователя (django)

    Выбирайте самые дальние k точек из заданных n точек

    Python - лучший язык программирования в мире.