我需要定义一个名为remove_letters(str1,str2)
的函数,该函数返回一个字符串,该字符串是从字符串2中删除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))
答案 0 :(得分:4)
您可以使用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
>>>
答案 1 :(得分:2)
def remove_letters(str1,str2):
s = set(str1)
return "".join([char for char in str2 if char not in s])
或循环:
def remove_letters(str1, str2):
res = ""
s = set(str1)
for char in str2:
if char not in s:
res += char
return res
循环和列表推导都具有相同的逻辑,我们将字符保留在str2中,而不是出现在str1中。
使用您自己的代码,您需要遍历str2并从str1中的str2_list中删除任何char,然后使用列表中的join来获取字符串:
def remove_letters(str1,str2):
str2_list = list(str2)
for char in str2:
if char in str1:
str2_list.remove(char)
return "".join(str2_list)