最近对数据进行处理的时候, 需要对一个列表里面的数据进行除杂处理, 只保留一部分有特定特征的值, 所以必须用到正则表达式对来匹配, 开始使用的是一下子就想到的就是通过循环列表内的每个元素来进行匹配.
例如, 下面就是使用简单循环从列表中用正则匹配筛选出所有的dog特征的数据:
正则表达式是为了匹配字符串中特定的字符, 是一个很强大的工具, 对数据筛选处理方面是用处很大的, 特别是爬虫, 数据分析等
需要对数据进行筛选的工作. 而下面的例子只用到了正则中很小的一部分功能
还未了解正则的可以到 菜鸟教程—正则表达式 学习一下.
# 筛选出data_list中所有的dog并保存在new_data_list中
import re
data_list = ['cat_1', 'dog_1', 'dog_2', 'cat_2', 'dog_3', 'cat_3'] # 原列表中既有dog也有cat, 并且无规律
new_data_list = [] # 保存筛选出来dog的列表
for data in data_list: # 遍历列表
if re.match('dog.*', data) != None: # 如果正则匹配出的数据不为None, 就将此数据添加到新列表中
new_data_list.append(data)
print(new_data_list)
运行后的结果如下, 可以看出成功筛选出了所有的dog并保存在了新列表中
['dog_1', 'dog_2', 'dog_3']
Process finished with exit code 0
但是但是这个还是有点太多了, 而且python中这么多高级函数, 还有迭代器生成器, 肯定有跟简洁的方法, 所以就想到了使用
filter()函数还有lambda匿名函数来进行简化.
代码如下:
# 筛选出data_list中所有的dog并保存在new_data_list中
import re
data_list = ['cat_1', 'dog_1', 'dog_2', 'cat_2', 'dog_3', 'cat_3'] # 原列表中既有dog也有cat, 并且无规律
new_data_list = list(filter(lambda x: re.match('dog.*', x) != None, data_list)) # 生成新列表
print(new_data_list)
运行结果仍然很上面使用循环的一样, 但是却简单了不少, 只用了一行, 还不用新建空列表:
['dog_1', 'dog_2', 'dog_3']
Process finished with exit code 0
如果不知道filter()函数和lambda匿名函数的具体用法, 可以到 filter—廖雪峰官方网站 和 匿名函数—廖雪峰官方网站 学习.
看完应该就知道上面的用法了.
⚠️系个人总结, 如有更好的方法欢迎留言提出…