从字符串中删除某些字母

时间:2013-07-28 15:50:31

标签: python string

在python中,我应该编写一个程序,要求用户输入一个字符串,然后删除所有出现的p,q,r,s,t(小写和大写),然后打印出所有内容其他。 对于输入Today it is Tuesday,应打印oday i i ueday

我已经编写了代码,但如果需要,它不会删除最后一个字母。 这是我写的:

S = str(input("Please enter some text: "))
L = list(S)
for i in L :
     if i in 'tsrqpPQRST' :
         L.remove(i)
string = ""
for char in L :
     string = string + char
print(string)

4 个答案:

答案 0 :(得分:1)

您可以使用str.translate

>>> test = 'Today it is Tuesday'
>>> removeText = 'pqrst'
>>> test.translate(None, removeText+removeText.upper())
'oday i i ueday'

由于您使用的是Python 3,请使用此类translate()方法。

>>> test = 'Today it is Tuesday'
>>> removeText = 'pqrst'
>>> test.translate(dict.fromkeys(ord(elem) for elem in removeText+removeText.upper()))
'oday i i ueday'

代码中的问题是你在迭代时从列表中删除了东西。

这样做有用。 (在这里你制作一个副本,迭代它,同时从原始列表中删除元素)

>>> testList = list(test)
>>> for i in testList[:]:
        if i in 'pqrstPQRST':
            testList.remove(i)


>>> "".join(testList)
'oday i i ueday'

P.S - 不要使用string = ''并迭代列表并加入字符,只需使用"".join(...)

答案 1 :(得分:1)

您可以使用正则表达式:

 import re
 new_string = re.sub('(?i)[pqrst]', '', S)

答案 2 :(得分:1)

您可以合并joingenerator expression。组合for循环和字符串连接不是有效的或pythonic。此外,字符串本身是可迭代的,无需将其转换为列表。

>>> s = 'Today it is Tuesday'
>>> ''.join(x for x in s if x not in 'pqrstPQRST')
'oday i i ueday'
>>> 

答案 3 :(得分:0)

有很多方法可以做到这一点。 e.g。

>>> s = "helllo"
>>> s.replace("l","")
'heo'
>>> s.translate(None,"le")
'ho'
>>> 

作为旁注,你不必将字符串转换为列表来迭代它但是当你迭代它时你不应该修改一个字符串,所以如果你想改进你的代码,它将是:

>>> s
'helllo'
>>> m = ""
>>> for i in s:
        if i not in "el": #put the list of characters here
                m += i


>>> m
'ho'
>>> 

通过这种方式,您可以复制字符串,在迭代过程中修改它时不会遇到问题。