Python Удалить последний символ из строки и вернуть его

Хотя я знаю, что есть такая возможность:

>>> a = "abc" >>> result = a[-1] >>> a = a[:-1] 

Теперь я также знаю, что строки неизменны и поэтому что-то вроде этого:

 >>> a.pop() c 

это невозможно.

Но действительно ли это предпочтительный способ?

4 Solutions collect form web for “Python Удалить последний символ из строки и вернуть его”

Строки «непреложны» по уважительной причине: это действительно экономит много головных болей, чаще, чем вы думаете. Это также позволяет питону быть очень умным в оптимизации их использования. Если вы хотите обрабатывать свою строку с шагом, вы можете вытащить ее часть с помощью split() или разделить на две части, используя индексы:

 a = "abc" a, result = a[:-1], a[-1] 

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

 for result in reversed(a): ... 

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

 ans = "foo,blah,etc." for a in ans.split(","): ... 

Это не только предпочтительный способ, но и единственный разумный способ. Поскольку строки являются неизменными, чтобы «удалить» символ из строки, вы должны создать новую строку всякий раз, когда вам требуется другое строковое значение.

Вам может быть интересно, почему строки неизменяемы, учитывая, что вы должны создавать целую новую строку каждый раз, когда вы меняете персонажа. В конце концов, строки C представляют собой просто массивы символов и, таким образом, изменяемы, а некоторые языки, которые поддерживают строки более чисто, чем C, также допускают изменчивые строки. Есть две причины иметь непреложные строки: безопасность / безопасность и производительность.

Безопасность, вероятно, является самой важной причиной неизменности строк. Когда строки неизменяемы, вы не можете передать строку в какую-либо библиотеку, а затем изменить эту строку под ногами, когда вы этого не ожидаете. Вы можете задаться вопросом, какая библиотека изменит параметры строки, но если вы отправляете код клиентам, вы не можете контролировать их версии стандартной библиотеки, а вредоносные клиенты могут изменить свои стандартные библиотеки, чтобы разорвать вашу программу и узнать больше о его внутренностях. Неизбежные объекты также легче рассуждать, что очень важно, когда вы пытаетесь доказать, что ваша система защищена от конкретных угроз. Эта простота рассуждений особенно важна для безопасности потоков, поскольку неизменяемые объекты автоматически поточно-безопасны.

Производительность на удивление часто бывает лучше для неизменяемых строк. Всякий раз, когда вы берете фрагмент строки, среда выполнения Python только размещает представление поверх исходной строки, поэтому нет нового распределения строк. Поскольку строки неизменяемы, вы получаете семантику копирования без фактического копирования, что является реальной победой в производительности.

Эрик Липперт объясняет больше об обосновании неизменяемых строк (в C #, а не Python).

Точная формулировка вопроса заставляет меня думать, что это невозможно.

return to me означает, что у вас есть функция, которую вы передали в качестве параметра.

Вы не можете изменить этот параметр. Присвоение ему только изменяет значение параметра внутри функции, а не передается в строке. Например

 >>> def removeAndReturnLastCharacter(a): c = a[-1] a = a[:-1] return c >>> b = "Hello, Gaukler!" >>> removeAndReturnLastCharacter(b) ! >>> b # b has not been changed Hello, Gaukler! 

Да, строки python неизменяемы, и любая модификация приведет к созданию новой строки. Вот как это делается в основном.

Итак, продолжайте.

  • NDB: сортировка результатов запроса
  • Настройка миниатюры для диска Google
  • Получение почты в Google App Engine
  • python: преобразовать строку в имя переменной
  • Python: TypeError: объект «NoneType» не имеет атрибута «__getitem__»
  • В чем разница между pytz и python-dateutil?
  • У Python есть неизменный список?
  • Различия между `input` и` raw_input`
  • Есть ли способ проверить подпись функции в Python?
  • Выполнение баланса кредитной карты в Python
  • Частные функции / Применения переменных в python
  • Python - лучший язык программирования в мире.