首页 > 解决方案 > 如何从字符串中删除字符?

问题描述

如何从 Python 中用户定义的句子中删除用户定义的字母?

嗨,如果有人愿意花时间尝试帮助我解决一些 python 代码。

我目前正在做一个软件工程训练营,目前的要求是我创建一个程序,用户输入一个句子,然后用户输入他/她希望从句子中删除的字母。

我在网上搜索过,有大量关于从字符串中删除字母的文章和主题,但我找不到一篇关于如何从用户定义的字符串中删除用户定义的字母的文章或主题。

import re
sentence = input("Please enter a sentence: ")
letters = input("Please enter the letters you wish to remove: ")
sentence1 = re.sub(letters, '', sentence)
print(sentence1)

预期结果应该从用户定义的字符串中删除多个字母,但如果您只输入 1 个字母,这将删除一个字母。如果您输入多个字母,它将只打印原始句子。任何帮助或指导将不胜感激。

标签: pythonregexstringreplacestrip

解决方案


如果我理解正确,我们可以在这里使用str.maketransstr.translate方法,例如

from itertools import repeat

sentence1 = sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))

这是逐行执行的:

  • 创建None将被解释为“删除此字符”的字母映射

    translation_mapping = dict(zip(letters, repeat(None))
    
  • 从中创建翻译表

    translation_table = str.maketrans(translation_mapping)
    
  • 使用给定的翻译表str

    sentence1 = sentence.translate(translation_table)
    

测试

>>> sentence = 'Some Text'
>>> letters = 'te'
>>> sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))
'Som Tx'

比较

from timeit import timeit
print('this solution:',
      timeit('sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))',
             'from itertools import repeat\n'
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))
print('@FailSafe solution using `re` module:',
      timeit('re.sub(str([letters]), "", sentence)',
             'import re\n'
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))
print('@raratiru solution using `str.join` method:',
      timeit('"".join([x for x in sentence if x not in letters])',
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))

给我的电脑

this solution: 3.620041800000024
@FailSafe solution using `re` module: 66.5485033
@raratiru solution using `str.join` method: 70.18480099999988

str.join所以我们可能应该在到处使用正则表达式和'ing 一个字符之前三思而后行str


推荐阅读