String Slicing Python

У меня есть строка, например:

s = "this is a string, a"

где ',' (запятая) всегда будет третьим последним символом, ака s [-3].

Я думаю о способах удаления ',', но может думать только о преобразовании строки в список, удалении ее и преобразовании ее в строку. Это, однако, слишком много для простой задачи.

Как я могу выполнить это более простым способом?

Ответ 1

Обычно вы просто делаете:

s = s[:-3] + s[-2:]

s[:-3] дает вам строку, но не включая запятую, которую вы хотите удалить ("this is a string"), а s[-2:] дает вам другую строку, начинающуюся с одного символа за запятую (" a").

Затем объединение двух строк вместе дает вам то, что было после ("this is a string a").

Ответ 2

Пара вариантов, используя "удалить последнюю запятую", а не "удалить третий последний символ":

s[::-1].replace(",","",1)[::-1]

или

''.join(s.rsplit(",", 1))

Но они довольно уродливые. Чуть лучше:

a, _, b = s.rpartition(",")
s = a + b

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

Ответ 3

Строки Python неизменяемы. Это означает, что вы должны создать не менее 1 новую строку, чтобы удалить запятую, в отличие от редактирования строки на месте на языке, таком как C.

Ответ 4

Для удаления каждого символа "," в тексте вы можете попробовать

s = s.split(',')
>> ["this is a string", " a"]
s = "".join(s)
>> "this is a string a"

Или в одной строке:

s0 = "".join(s.split(','))

Ответ 5

Самый простой способ: вы можете использовать функцию replace как: -

>>> s = 'this is a string, a'
>>> s = s.replace(',','')
>>> s
'this is a string a'

Здесь функция replace() выполняет поиск символа ',' и заменяет его на '', то есть пустой символ

Обратите внимание, что функция replace() по умолчанию использует все ',', но если вы хотите заменить только некоторые ',', в некоторых случаях вы можете использовать: s.replace(',', '', 1)