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 相关文章推荐
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
python画双y轴图像的示例代码
Jul 07 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
python输入错误后删除的方法
Oct 12 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Python中socket网络通信是干嘛的
May 27 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
js实现密码强度检测【附示例】
2016/03/30 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python pickle模块用法实例
2015/04/14 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
python3.7.0的安装步骤
2018/08/27 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
单位未婚证明范本
2014/01/18 职场文书
致400米运动员广播稿
2014/02/07 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
cf战队收人口号
2014/06/21 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
财产分割协议书范本
2014/11/03 职场文书
化验室岗位职责
2015/02/14 职场文书