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 25 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
在python中pandas的series合并方法
Nov 12 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
pandas数据处理进阶详解
Oct 11 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
python3下pygame如何实现显示中文
Jan 11 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
Elasticsearch 基本查询和组合查询
Apr 19 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
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
小学五年级学生评语
2014/04/22 职场文书
出国留学自荐信模板
2015/03/06 职场文书
家庭贫困证明
2015/06/16 职场文书