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使用PyV8执行javascript代码示例分享
Dec 04 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
python实现批量修改服务器密码的方法
Aug 13 Python
python3中利用filter函数输出小于某个数的所有回文数实例
Nov 24 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
深入浅析python的第三方库pandas
Feb 13 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
Python基于pillow库实现生成图片水印
Sep 14 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
用户的详细注册和判断
2006/10/09 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
Vue中$refs的用法详解
2018/06/24 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
Python访问纯真IP数据库脚本分享
2015/06/29 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python3实现简单飞机大战
2020/11/29 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
秘书英文求职信范文
2014/01/31 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
交通事故和解协议书
2014/09/25 职场文书
民主评议党员工作总结
2014/10/20 职场文书
大学生毕业个人总结
2015/02/15 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers