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的Flask框架中实现全文搜索功能
Apr 20 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
对django 模型 unique together的示例讲解
Aug 06 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
python中return不返回值的问题解析
Jul 22 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
python练习程序批量修改文件名
2014/01/16 Python
python实现的一个p2p文件传输实例
2014/06/04 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
python样条插值的实现代码
2018/12/17 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
python openCV自制绘画板
2020/10/27 Python
材料成型专业个人求职信范文
2013/09/25 职场文书
影视动画专业个人的自我评价
2013/12/31 职场文书
大学社团活动总结
2014/04/26 职场文书
综治宣传月活动总结
2014/04/28 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
小时代观后感
2015/06/10 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python