我需要定义一个名为 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
>>>
关于python - 从字符串中删除出现在前一个字符串中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043804/