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字典多条件排序方法实例
Jun 30 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python获取运行目录与当前脚本目录的方法
Jun 01 Python
Python回调函数用法实例详解
Jul 02 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
python复制文件到指定目录的实例
Apr 27 Python
Python之list对应元素求和的方法
Jun 28 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
Python Web框架之Django框架Model基础详解
Aug 16 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 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
用 php 编写的日历
2006/10/09 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
VUE利用vuex模拟实现新闻点赞功能实例
2017/06/28 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
关于vue-router的那些事儿
2018/05/23 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
python列表的增删改查实例代码
2018/01/30 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
python tkinter组件使用详解
2019/09/16 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
介绍一下SQL Server的全文索引
2013/08/15 面试题
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
大学生求职推荐信
2013/11/27 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
文艺晚会策划方案
2014/06/11 职场文书
区域经理岗位职责
2015/02/02 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js