Python cookbook(数据结构与算法)筛选及提取序列中元素的方法


Posted in Python onMarch 19, 2018

本文实例讲述了Python筛选及提取序列中元素的方法。分享给大家供大家参考,具体如下:

问题:提取出序列中的值或者根据某些标准对序列做删减

解决方案:列表推导式、生成器表达式、使用内建的filter()函数

1、列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式

# Examples of different ways to filter data
mylist = [1, 4, -5, 10, -7, 2, 3, -1]
print('mylist=',mylist)
# 使用列表推导式
pos = [n for n in mylist if n > 0]
print('正数为:',pos)
neg = [n for n in mylist if n < 0]
print('负数为:',neg)

运行结果:

mylist= [1, 4, -5, 10, -7, 2, 3, -1]
正数为: [1, 4, 10, 2, 3]
负数为: [-5, -7, -1]

2、生成器表达式方法:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]
print('mylist=',mylist)
# 使用生成器表达式
pos = (n for n in mylist if n > 0)
print('生成器为',pos)
for x in pos:
 print(x)

运行结果:

mylist= [1, 4, -5, 10, -7, 2, 3, -1]
生成器为 <generator object <genexpr> at 0x02421FD0>
1
4
10
2
3

3、如果筛选标准无法简单表示在列表推导式或者生成器表达式中,比如筛选过程涉及一些异常处理或者更复杂的细节,可以考虑将处理筛选逻辑的代码放到单独的函数中,然后使用内建的filter()函数处理。

values=['1','2','-3','-','N/A','4','5','%']
def is_int(val): #将处理筛选逻辑的代码放到单独的函数
 try:
  x=int(val)
  return True
 except ValueError:
  return False
ivals=list(filter(is_int,values)) #使用filter(func,list)进行过滤
print(ivals)

运行结果:

['1', '2', '-3', '4', '5']

filter(func,list)会创建一个迭代器,如果想要列表形式的结果,需使用list()将结果转为列表。

补充:

用新值替换掉不满足标准的值,而不是丢弃它们,可通过将筛选条件移到一个条件表达式中来轻松实现。

# Negative values clipped to 0
neg_clip = [n if n > 0 else 0 for n in mylist]
print('负数替换为0,结果:',neg_clip)
# Positive values clipped to 0
pos_clip = [n if n < 0 else 0 for n in mylist]
print('正数替换为0,结果:',pos_clip)
'''

运行结果:

mylist= [1, 4, -5, 10, -7, 2, 3, -1]
负数替换为0,结果: [1, 4, 0, 10, 0, 2, 3, 0]
正数替换为0,结果: [0, 0, -5, 0, -7, 0, 0, -1]

值得推荐的工具itertools.compress(),它接受一个可迭代对象以及一个布尔选择器序列作为输入。

如果想把对一个序列的筛选结果施加到另一个相关的序列上时,就会非常有用。

# 采用筛选工具itertools.compress()
addresses = [
 '5412 N CLARK',
 '5148 N CLARK',
 '5800 E 58TH',
 '2122 N CLARK',
 '5645 N RAVENSWOOD',
 '1060 W ADDISON',
 '4801 N BROADWAY',
 '1039 W GRANVILLE',
]
counts = [ 0, 3, 10, 4, 1, 7, 6, 1]
from itertools import compress
more5 = [ n > 5 for n in counts ]
a = list(compress(addresses, more5))
print(a)

运行结果:

['5800 E 58TH', '1060 W ADDISON', '4801 N BROADWAY']

这里的关键是首先创建一个布尔序列,用来表示哪个元素可满足我们的条件。然后compress()函数挑选出满足布尔值为True的相应元素。

filter()函数一样,正常情况下compress()函数返回一个迭代器,若需要返回列表则需使用list()将结果转为列表。

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 返回汉字的汉语拼音
Feb 27 Python
python进阶教程之动态类型详解
Aug 30 Python
Python实现删除Android工程中的冗余字符串
Jan 19 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
Python处理JSON数据并生成条形图
Aug 05 Python
详解Python核心对象类型字符串
Feb 11 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python机器学习库xgboost的使用
Jan 20 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
什么是python的自省
Jun 21 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 #Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 #Python
遗传算法python版
Mar 19 #Python
python实现简单遗传算法
Mar 19 #Python
python psutil库安装教程
Mar 19 #Python
Python递归实现汉诺塔算法示例
Mar 19 #Python
Python实现替换文件中指定内容的方法
Mar 19 #Python
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
为Python程序添加图形化界面的教程
2015/04/29 Python
python中的全局变量用法分析
2015/06/09 Python
python如何读写json数据
2018/03/21 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
python自动化办公操作PPT的实现
2021/02/05 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
2015年外联部工作总结
2015/04/03 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python
JS的深浅复制详细
2021/10/16 Javascript
V Rising 服务器搭建图文教程
2022/06/16 Servers