如何使用Python从字符串中删除字符

Laz*_*zer 421 python string

例如,有一个字符串.EXAMPLE.

如何删除中间字符,即M从中删除?我不需要代码.我想知道:

  • Python中的字符串是否以任何特殊字符结尾?
  • 这是一个更好的方法 - 从中​​间字符开始从右到左移动或创建一个新字符串而不是复制中间字符?

Ned*_*der 592

在Python中,字符串是不可变的,因此您必须创建一个新字符串.您可以选择如何创建新字符串.如果你想删除它出现的'M':

newstr = oldstr.replace("M", "")
Run Code Online (Sandbox Code Playgroud)

如果要删除中心字符:

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]
Run Code Online (Sandbox Code Playgroud)

你询问字符串是否以特殊字符结尾.不,你是在想C程序员.在Python中,字符串以其长度存储,因此任何字节值(包括\0)都可以出现在字符串中.

  • 鉴于提问者是python的新手,可能值得注意的是,在版本2.X python中,"/"运算符返回一个整数(截断为零),在版本3.X python中你应该使用"//"代替.此外,脚本开头的"from __future__ import division"行将使版本2.X python像版本3.X一样 (16认同)

rec*_*ive 64

这可能是最好的方法:

original = "EXAMPLE"
removed = original.replace("M", "")
Run Code Online (Sandbox Code Playgroud)

不要担心转移角色等.大多数Python代码都是在更高级别的抽象上进行的.

  • 对,那是正确的.如果你只想替换'n`次出现,请使用`original.replace("M","",n)`. (13认同)
  • `M`可能不是唯一的.在这种情况下,这将取代所有的"M",对吗? (6认同)

Eto*_* B. 58

要替换特定职位:

s = s[:pos] + s[(pos+1):]
Run Code Online (Sandbox Code Playgroud)

要替换特定字符:

s = s.replace('M','')
Run Code Online (Sandbox Code Playgroud)

  • 虽然这可能有用,但我认为你的答案可以通过解释第一部分的内容来改进,因为对于Python新手来说,子字符串操作不一定容易理解而没有任何解释. (18认同)

kin*_*all 27

字符串是不可变的.但是您可以将它们转换为可更改的列表,然后在更改后将列表转换回字符串.

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
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个新字符串,正如其他人所示,通过从现有字符串中获取所需字符以外的所有字符串.

  • 你为什么不使用`str.replace`方法? (3认同)

Ric*_*arn 12

如何从中删除中间字符,即M?

你不能,因为Python中的字符串是不可变的.

Python中的字符串是否以任何特殊字符结尾?

不,它们类似于人物名单; 列表的长度定义字符串的长度,并且没有字符充当终结符.

这是一个更好的方法 - 从中​​间字符开始从右到左移动或创建一个新字符串而不是复制中间字符?

您无法修改现有字符串,因此必须创建一个包含除中间字符之外的所有字符串的新字符串.


Ste*_*ker 11

使用translate()方法:

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
Run Code Online (Sandbox Code Playgroud)

  • 方法已经改变了.请参阅Python 3的文档:[translate()](https://docs.python.org/3/library/stdtypes.html#str.translate)这用空格替换不同的字符(`None`要删除似乎不是work):`translate(str.maketrans("<>",""))` (3认同)
  • 答案中的代码相当于python3:`'EXAMPLE'.translate({ord("M"):None})` (3认同)

kil*_*own 7

UserString.MutableString

可变方式:

import UserString

s = UserString.MutableString("EXAMPLE")

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

# Delete 'M'
del s[3]

# Turn it for immutable:
s = str(s)
Run Code Online (Sandbox Code Playgroud)

  • 404网站未导入 (2认同)

小智 6

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
Run Code Online (Sandbox Code Playgroud)

我看到这个地方在这里


小智 6

card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)
Run Code Online (Sandbox Code Playgroud)

如何从字符串中删除一个字符: 这是一个示例,其中有一堆卡片表示为字符串中的字符.其中一个是绘制的(import.choice()函数的导入随机模块,它在字符串中选择一个随机字符).创建一个新字符串cardsLeft来保存由字符串函数replace()给出的剩余卡片,其中最后一个参数表示只有一个"卡片"将由空字符串替换...