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

标签 python string function python-3.3

我需要定义一个名为 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.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
>>>

关于python - 从字符串中删除出现在前一个字符串中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043804/

相关文章:

python - 当我希望文本在 Flask/jinja2 中显示为 html 时,文本已转义

python - 并行遍历 numpy 数组并创建新结果数组的有效方法

c++ - 搜索整数子串的超快速方法

java - 将字符串转换为 SQL 日期

Python 迭代错误地描述了字符串值

Java最大函数递归

用于替换 C 文件中的#define 值的 Python 脚本

python - 删除不重复的条目

javascript - 如何求一系列数字的最小公倍数?

c - 圆括号和花括号之间的变量