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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
Python读取Excel的方法实例分析
Jul 11 Python
python实现感知器算法详解
Dec 19 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
python调用webservice接口的实现
Jul 12 Python
Python类如何定义私有变量
Feb 03 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 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/04/17 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
thinkPHP中U方法加密传递参数功能示例
2018/05/29 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python Deque 模块使用详解
2014/07/04 Python
Python实现完整的事务操作示例
2017/06/20 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
使用Python实现分别输出每个数组
2019/12/06 Python
python try...finally...的实现方法
2020/11/25 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
2016情人节宣传语
2015/07/14 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
使用Redis实现点赞取消点赞的详细代码
2022/03/20 Redis
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL