从字符串中删除特定字符

时间:2013-10-18 20:17:34

标签: python python-3.x

我想从用户提供的字符串中删除所有元音。下面是我的代码和我得到的输出。出于某种原因,for循环只检查第一个字符,而不是其他任何内容。

代码:

sentence = "Hello World."
sentence = sentence.lower()

for x in sentence:
    sentence = sentence.strip("aeiou")
    print (x)

print (sentence)

输出:

hello world

我有print(x)只是为了确保它正在查看所有字符并循环字符数量。然而,当循环到达元音时,它似乎没有做我想要的,这是从字符串中删除它。

2 个答案:

答案 0 :(得分:3)

这是按预期工作的。 strip定义为:

  

返回删除了前导和尾随字符的字符串副本。 chars参数是一个字符串,指定要删除的字符集。

http://docs.python.org/2/library/stdtypes.html#str.strip

正如它所说,它只影响前导和尾随字符 - 一旦找到一个不在要剥离的字符集中的字符,它就会停止查看。无论如何,松散地说;我没有检查实际的实现算法。

我认为translate是最有效的方法。来自文档:

>>> 'read this short text'.translate(None, 'aeiou')
'rd ths shrt txt'

http://docs.python.org/2/library/stdtypes.html#str.translate

答案 1 :(得分:0)

您无法从字符串中删除字符:字符串对象是不可变的。你所能做的就是创造一个新的字符串,里面没有更多的作品。

x = ' Hello great world'
print x,'  id(x) == %d' % id(x)

y = x.translate(None,'aeiou') # directly from the docs
print y,'  id(y) == %d' % id(y)

z = ''.join(c for c in x if c not in 'aeiou')
print z,'  id(z) == %d' % id(z)

结果

 Hello great world   id(x) == 18709944
 Hll grt wrld   id(y) == 18735816
 Hll grt wrld   id(z) == 18735976

函数id()给出的地址差异意味着对象 x y z 是不同的对象,已本地化在RAM中的不同位置