[英]Removing letters from a string that occur in the previous string
我需要定義一個稱為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.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
>>>
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中刪除所有字符,然后在列表上使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.