簡體   English   中英

從字符串中刪除前一個字符串中出現的字母

[英]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.translatestr.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM