it-swarm.com.ru

Как удалить символ из строки, используя Python

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

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

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

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

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

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

midlen = len(oldstr)/2
newstr = oldstr[:midlen] + oldstr[midlen+1:]

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

515
Ned Batchelder

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

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

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

58
recursive

Чтобы заменить определенную позицию:

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

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

s = s.replace('M','')
52
Eton B.

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

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

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

23
kindall

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

Вы не можете, потому что строки в Python являются immutable .

Строки в Python заканчиваются каким-либо специальным символом?

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

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

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

11
Richard Fearn

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

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
10
Stefan van den Akker
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

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

5
StaffanRolfsson

UserString.MutableString

Изменчивый способ:

import UserString

s = UserString.MutableString("EXAMPLE")

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

# Delete 'M'
del s[3]

# Turn it for immutable:
s = str(s)
5
killown

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

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
3
PaulM

Если вы хотите удалить/игнорировать символы в строке, и, например, у вас есть эта строка,

"[11: L: 0]"

из ответа веб-API или чего-то в этом роде, например, файла CSV, допустим, вы используете запросы

import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content

цикл и избавиться от нежелательных символов:

for line in resp.iter_lines():
  line = line.replace("[", "")
  line = line.replace("]", "")
  line = line.replace('"', "")

Необязательный сплит, и вы сможете читать значения по отдельности:

listofvalues = line.split(':')

Теперь доступ к каждому значению стал проще:

print listofvalues[0]
print listofvalues[1]
print listofvalues[2]

Это напечатает

11

L

0

3
d1jhoni1b
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

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

3
user1443297

Чтобы удалить char или sub-string один раз (только первое вхождение): 

main_string = main_string.replace(sub_str, replace_with, 1)

ПРИМЕЧАНИЕ. Здесь 1 можно заменить на любую int для числа случаев, которое вы хотите заменить. 

0
BlackBeard
from random import randint


def shuffle_Word(word):
    newWord=""
    for i in range(0,len(Word)):
        pos=randint(0,len(Word)-1)
        newWord += Word[pos]
        Word = Word[:pos]+Word[pos+1:]
    return newWord

Word = "Sarajevo"
print(shuffle_Word(word))
0
Fahrudin Halilović

Вы можете просто использовать понимание списка.

Предположим, что у вас есть строка: my name is и вы хотите удалить символ m. используйте следующий код:

"".join([x for x in "my name is" if x is not 'm'])
0
hubert