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多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
详解Python绘图Turtle库
Oct 12 Python
python yield关键词案例测试
Oct 15 Python
python如何将两个txt文件内容合并
Oct 18 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
Python包管理工具pip的15 个使用小技巧
May 17 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
一个捕获函数输出的函数
2007/02/14 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
php接口隔离原则实例分析
2019/11/11 PHP
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
vue v-model的用法解析
2020/10/19 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python实现合并字典的方法
2015/07/07 Python
Python星号*与**用法分析
2018/02/02 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
解决python 文本过滤和清理问题
2019/08/28 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
行政前台岗位职责
2013/12/04 职场文书
大学生实习思想汇报
2014/01/12 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
党员公开承诺书范文
2014/03/25 职场文书
终止劳动合同通知书
2015/04/16 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang