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比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
简单学习Python time模块
Apr 29 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
python中嵌套函数的实操步骤
Feb 27 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
浅析Python的命名空间与作用域
Nov 25 Python
python 标准库原理与用法详解之os.path篇
Oct 24 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根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
js删除数组中某几项的方法总结
2019/01/16 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Python实现简单截取中文字符串的方法
2015/06/15 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python读取yaml文件的详细教程
2020/07/21 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
Linux的主要特性
2016/09/03 面试题
《果园机器人》教学反思
2014/04/13 职场文书
目标责任书范本
2014/04/16 职场文书
财务会计实训报告
2014/11/05 职场文书
兵马俑的导游词
2015/02/02 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书