Skip to main content
 首页 » 编程设计

python之从字符串中删除出现在前一个字符串中的字母

2025年05月04日20powertoolsteam

我需要定义一个名为 remove_letters(str1,str2) 的函数,它返回一个字符串,该字符串是通过从字符串中删除两个出现在 str1 中的每个字母而获得的

到目前为止,我已经有了这个,但它不会删除重复的字母,它只会删除您为删除而输入的内容。

def remove_letters(str1,str2): 
    str2_list = list(str2) 
    for char in str2: 
         str2_list.remove() 
         return (str2) 

更新

我现在需要针对各种字符串测试此函数。调用时,代码仅返回最后一个结果,而不返回前两个结果。这是我的代码。

def test_remove_letters(): 
    string_list = [('sop', 'sen'),('dog', 'god'),('lighter', 'darker')] 
    for str1,str2 in string_list: 
        print('The original words are', str1, 'and', str2) 
        return ('The result is', remove_letters(str1,str2)) 

请您参考如下方法:

您可以使用 str.translate和 str.maketrans为此:

>>> def remove_letters(str1,str2): 
...     return str2.translate(str.maketrans('', '', str1)) 
... 
>>> remove_letters('abc', 'aaabbbccc') 
'' 
>>> remove_letters('abc', 'aaaxbbbycccz') 
'xyz' 
>>> 

如果您使用 timeit.timeit 测试此解决方案,你会发现它非常有效:

>>> from timeit import timeit 
>>> 
>>> def remove_letters(str1,str2): 
...     s = set(str1) 
...     return "".join([char for char in str2 if char not in s]) 
... 
>>> timeit("remove_letters('abc', 'aaaxbbbycccz')", "from __main__ import remove_letters") 
6.056879016746539 
>>> 
>>> def remove_letters(str1,str2): 
...     return str2.translate(str.maketrans('', '', str1)) 
... 
>>> timeit("remove_letters('abc', 'aaaxbbbycccz')", "from __main__ import remove_letters") 
5.283739134443065 
>>>