Как удалить символ из строки, используя Python - PullRequest
386 голосов
/ 24 августа 2010

Например, есть строка. EXAMPLE.

Как удалить из него средний символ, т. Е. M? Мне не нужен код Я хочу знать:

  • Строки в Python заканчиваются каким-либо специальным символом?
  • Какой способ лучше - сместить все справа налево, начиная со среднего символа ИЛИ создать новую строку и не копируя средний символ?

Ответы [ 15 ]

556 голосов
/ 24 августа 2010

В Python строки являются неизменяемыми, поэтому вам нужно создать новую строку.У вас есть несколько вариантов создания новой строки.Если вы хотите удалить букву «М» там, где она появляется:

newstr = oldstr.replace("M", "")

Если вы хотите удалить центральный символ:

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]

Вы спросили, заканчивается ли строка специальным символом.Нет, ты думаешь как программист на Си.В Python строки хранятся с их длиной, поэтому в строке может отображаться любое байтовое значение, включая \0.

62 голосов
/ 24 августа 2010

Это, наверное, лучший способ:

original = "EXAMPLE"
removed = original.replace("M", "")

Не беспокойтесь о смене персонажей и тому подобное. Большая часть кода Python размещается на гораздо более высоком уровне абстракции.

56 голосов
/ 24 августа 2010

Для замены определенной позиции:

s = s[:pos] + s[(pos+1):]

Чтобы заменить определенный символ:

s = s.replace('M','')
27 голосов
/ 25 августа 2010

Строки неизменны.Но вы можете преобразовать их в список, который является изменяемым, а затем преобразовать список обратно в строку после того, как вы изменили ее.

s = "this is a string"

l = list(s)  # convert to list

l[1] = ""    # "delete" letter h (the item actually still exists but is empty)
l[1:2] = []  # really delete letter h (the item is actually removed from the list)
del(l[1])    # another way to delete it

p = l.index("a")  # find position of the letter "a"
del(l[p])         # delete it

s = "".join(l)  # convert back to string

Вы также можете создать новую строку, как показали другие, взяв все за исключением символа, который вы хотите из существующей строки.

12 голосов
/ 24 августа 2010

Как удалить из него средний символ, т. Е. М?

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

Завершают ли строки в Python какой-либо специальный символ?

Нет.Они похожи на списки персонажей;длина списка определяет длину строки, и ни один символ не действует как терминатор.

Что является лучшим способом - сдвигая все справа налево, начиная со среднего символа ИЛИ создания новогострока и не копировать средний символ?

Вы не можете изменить существующую строку, поэтому вы должны создать новую, содержащую все, кроме среднего символа.

11 голосов
/ 09 октября 2013

Используйте метод translate():

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
7 голосов
/ 24 августа 2010

UserString.MutableString

Изменяемый способ:

import UserString

s = UserString.MutableString("EXAMPLE")

>>> type(s)
<type 'str'>

# Delete 'M'
del s[3]

# Turn it for immutable:
s = str(s)
6 голосов
/ 19 июня 2013
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

Как удалить один символ из строки: Вот пример, где есть стопка карточек, представленных в виде символов в строке. Один из них нарисован (импортировать случайный модуль для функции random.choice (), которая выбирает случайный символ в строке). Новая строка, cardsLeft, создается для хранения оставшихся карт, заданных строковой функцией replace (), где последний параметр указывает, что только одна «карта» должна быть заменена пустой строкой ...

5 голосов
/ 08 июня 2012
def kill_char(string, n): # n = position of which character you want to remove
    begin = string[:n]    # from beginning to n (n not included)
    end = string[n+1:]    # n+1 through end of string
    return begin + end
print kill_char("EXAMPLE", 3)  # "M" removed

Я видел это где-то здесь .

4 голосов
/ 15 сентября 2015

Вот что я сделал, чтобы вырезать «М»:

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...