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

时间:2010-08-24 18:06:32

标签: python string

例如,有一个字符串。 EXAMPLE

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

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

16 个答案:

答案 0 :(得分:543)

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

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

如果要删除中心字符:

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

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

答案 1 :(得分:61)

这可能是最好的方式:

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

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

答案 2 :(得分:56)

替换特定职位:

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

替换特定字符:

s = s.replace('M','')

答案 3 :(得分:26)

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

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

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

答案 4 :(得分:12)

  

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

你不能,因为Python中的字符串是immutable

  

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

没有。它们类似于字符列表;列表的长度定义了字符串的长度,并且没有字符充当终结符。

  

哪种方式更好 - 从中​​间字符开始从右到左移动或创建新字符串而不复制中间字符?

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

答案 5 :(得分:11)

使用translate()方法:

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'

答案 6 :(得分: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)

答案 7 :(得分:6)

card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

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

答案 8 :(得分:5)

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

我在某处here已经看到了这一点。

答案 9 :(得分:4)

这就是我做了什么来切掉&#34; M&#34;:

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

答案 10 :(得分:3)

如果要删除/忽略字符串中的字符,例如,您有此字符串,

“[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

         

         

0

  

答案 11 :(得分:1)

另一种方法是使用函数

下面是一种只需调用函数即可从字符串中删除所有元音的方法

def disemvowel(s):
    return s.translate(None, "aeiouAEIOU")

答案 12 :(得分:0)

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))

答案 13 :(得分:0)

要删除charsub-string 一次(仅第一次出现):

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

注意:此处1可以用任何int替换您要替换的出现次数。

答案 14 :(得分:0)

您可以简单地使用列表理解。

假定您具有字符串my name is,并且要删除字符m。使用以下代码:

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

答案 15 :(得分:-1)

字符串在Python中是不可变的,所以你的两个选项基本上都是一样的。