Python如何筛选序列中的元素的方法实现


Posted in Python onJuly 15, 2019

本篇文章给大家带来的内容是关于Python如何筛选序列中的元素 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、需求

序列中含有一些数据,我们需要提取其中的值或根据某些标准对序列做删减,

2、解决方案

要筛选序列中的数据,通常最简单的方法是使用列表推导式。

例如:

myList=[1,4,-5,10,-7,2,3,-1]
print([n for n in myList if n>0])
print([n for n in myList if n<0])

结果:

[1, 4, 10, 2, 3]
[-5, -7, -1]

使用列表推导式的一个潜在缺点是如果原始输入非常大的话,这么做可能会产生一个庞大的结果。如果这是你需要考虑的问题,那么可以使用生成器表达式通过迭代的方法产生筛选结果,例如:

myList=[1,4,-5,10,-7,2,3,-1]
pos=(n for n in myList if n >0)
for x in pos:
  print(x)

结果:
1
4
10
2
3

有时候筛选的标准没法简单地表示在列表推导式或生成器表达式中。比如:假设筛选过程涉及异常处理或者其他一些复杂的细节。基于从,可以将处理筛选逻辑的代码放到单独的函数中,然后使用内建的filter()函数处理,示例如下:

values=['1','2','-3','-','4','N/A','5']
def is_int(val):
  try:
    x=int(val)
    return True
  except ValueError:
    return False
 
ivals=list(filter(is_int,values))
print(ivals)

结果:
['1', '2', '-3', '4', '5']

filter()创建了一个迭代器,因此如果我们想要的是列表形式的结果,请确保加上了list(),就像示例中那样。

3、分析

列表推导式和生成器表达式通常是用来筛选数据的最简单和最直接的方式。此外,它们也具有同时对数据做转换的能力。例如:

import math
myList=[1,4,-5,10,-7,2,3,-1]
print([math.sqrt(n) for n in myList if n>0])

结果:
[1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772]

关于筛选数据,有一种情况是用新值替换掉不满足标准的值,而不是抛弃它们。例如。除了要找到正整数之外,我们也希望在指定范围内将不满足要求的值替换掉。通常,这可以通过将筛选条件迁移到一个条件表达式中来轻松实现,就像下面这样:

myList=[1,4,-5,10,-7,2,3,-1]
print([n if n>0 else 0 for n in myList])
print([n if n<0 else 0 for n in myList])

结果:
[1, 4, 0, 10, 0, 2, 3, 0]
[0, 0, -5, 0, -7, 0, 0, -1]

另一个值得一提的筛选工具是itertools.compress(),它接受一个可迭代对象以及一个布尔选择器序列作为输入。输出时,它会给出所有在相应的布尔选择器中为True的可迭代对象元素。如果想把对一个序列的筛选结果施加到另一个相关的序列上时,这就会非常有用。

例如:

from itertools import compress
address=[
'5412 N CLARK1',
'5148 N CLARK2',
'5800 E CLARK3',
'2122 N CLARK4',
'5645 M CLARK5',
'1060 W CLARK6',
]
counts=[0,3,10,4,1,7]
#构建一个列表,它相应的count值要大于5
more5=[n>5 for n in counts]
print(more5)
 
print(list(compress(address,more5)))

结果:
[False, False, True, False, False, True]
['5800 E CLARK3', '1060 W CLARK6']

这里的关键在于首先创建一个布尔序列,用来表示哪个元素可满足我们的条件,然后compress()函数挑选出满足布尔值为True的相应元素。

同filter()函数一样,正常情况下,compress()会返回一个迭代器。因此,如果需要的话,得使用list()将结果转为列表。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单上手Python中装饰器的使用
Jul 12 Python
让python在hadoop上跑起来
Jan 27 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
python实现txt文件格式转换为arff格式
May 31 Python
python监测当前联网状态并连接的实例
Dec 18 Python
python解析含有重复key的json方法
Jan 22 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
pygame实现弹球游戏
Apr 14 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
May 20 Python
python脚本框架webpy模板控制结构
Nov 20 Python
python内存动态分配过程详解
Jul 15 #Python
python实现动态数组的示例代码
Jul 15 #Python
python移位运算的实现
Jul 15 #Python
python与C、C++混编的四种方式(小结)
Jul 15 #Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 #Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 #Python
Python将文字转成语音并读出来的实例详解
Jul 15 #Python
You might like
再推荐十款免费的php开发工具
2015/11/09 PHP
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Angular工具方法学习
2016/12/26 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
axios学习教程全攻略
2017/03/26 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
一个简单的node.js界面实现方法
2018/06/01 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
python更改已存在excel文件的方法
2018/05/03 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
python如何求解两数的最大公约数
2018/09/27 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python实现邮件发送功能
2019/08/10 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
python如何实时获取tcpdump输出
2020/09/16 Python
详解Python中如何将数据存储为json格式的文件
2020/11/18 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
华为c/c++笔试题
2016/01/25 面试题
迟到检讨书800字
2014/01/13 职场文书
建筑学专业自荐书
2014/07/09 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang