python - 如何从字符串中删除字符?
问题描述
如何从 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 个字母,这将删除一个字母。如果您输入多个字母,它将只打印原始句子。任何帮助或指导将不胜感激。
解决方案
如果我理解正确,我们可以在这里使用str.maketrans
和str.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
。
推荐阅读
- java - 将“10s”或“10h”之类的字符串转换为 Duration
- java - Oauth 保护的 rest api 在没有承载令牌的情况下工作
- javascript - Firefox中的Usemap属性和JQuery
- swift - 在 iOS 11 和 iOS 12 上注销后的 ASWebAuthentication 和 SFAuthentication 登录问题,无法使会话无效
- node.js - Promise.then() 在 SequelizeUniqueConstraintError 上触发
- react-native - React Native 自动 RTL 文本开关在 IOS 中不起作用,但在 android 中有效
- ruby-on-rails - Rails - 如何从 JSON Web 密钥获取公钥?
- perl - Catalyst:将 URL 与特定但可选的参数匹配
- azure - 在 Azure API 管理入站策略部分中获取路由参数
- angular - ngrx:集合中每个元素的加载状态