python - 这个修改后的清理功能是否正确?
问题描述
所以我是python的新手,我希望我能对我清理的函数有所了解。我的清理工作不仅要保留字母,还要保留数字,以及某些符号,如“@”和“_”。这是我的代码。
def cleanedup(s):
alphabet = 'abcdefghijklmnopqrstuvwxyz'
digits = '0123456789'
cleantext = ''
for character in s.lower():
if character in alphabet, digits, or characters == '@', '_':
cleantext += character
else:
cleantext += ' '
return cleantext
我希望看看这个功能是否正确或是否需要一些调整。如果需要进行一些调整,我希望它与我上面的没有什么不同。谢谢你。
解决方案
character in alphabet, digits, or characters == '@', '_'
不是有效的 Python 表达式。我很惊讶你没有收到错误。表达这一点的正确方法是
if character in alphabet or character in digits or character in ('@', '_'):
更好的方法是将所有允许的字符压缩到一个数据结构中,然后将这些字符与之进行比较:
from string import acii_lowercase, digits
allowed = set(ascii_lowercase + digits + '@_')
def cleanedup(s):
return ''.join(c if c in allowed else ' ' for c in s.lower())
''.join
是组合许多字符串的另一种方法,它不会在此过程中创建额外的字符串。
Aset
是一种类似于列表的数据结构,其工作方式更像是一个数学集合。查找对象是否在集合中比查找列表要快。
做你想做的更高级的方法是使用正则表达式:
import re
pattern = re.compile("[^a-z0-9@_]") # All characters that are not a-z, 0-9, _, and @
def cleanedup(s):
return pattern.sub(' ', s.lower())
推荐阅读
- java - CardView 点击下载PDF
- wpf - WPF:禁用组合框中的选定项目
- javascript - 使用 vee-validate 离开页面前提示
- swift - Swift 顺序执行函数
- javascript - 节点进程不以猫鼬索引退出
- php - 无法使用 apache 从根 Centos 7 引用的 php 中的 scandir()
- javascript - Node.js 异步/等待模块导出
- oracle - 将 nls 日期格式传递给 SQL Loader 控制文件
- google-chrome - chrome 的 200 和 200 OK 有什么区别?
- meteor - 流星银河“部署失败”