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下载Bing图片(代码)
Nov 07 Python
Python中的字符串查找操作方法总结
Jun 27 Python
python如何统计序列中元素
Jul 31 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
python打开文件的方式有哪些
Jun 29 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 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代码
2012/09/14 PHP
PHP文件操作详解
2016/12/30 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
js实现简单数字变动效果
2017/11/06 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
python远程登录代码
2008/04/29 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python中的TCP socket写法示例
2018/05/11 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python实现猜数字小游戏
2020/03/24 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
矫正人员思想汇报
2014/01/08 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
倡议书格式范文
2014/04/14 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
卖房协议书样本
2014/10/30 职场文书
质量整改报告范文
2014/11/08 职场文书