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使用minidom读写xml的方法
Jun 03 Python
Python操作串口的方法
Jun 17 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
分数霸榜! python助你微信跳一跳拿高分
Jan 08 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
对python 读取线的shp文件实例详解
Dec 22 Python
python解释器spython使用及原理解析
Aug 24 Python
详解python中docx库的安装过程
Nov 08 Python
python3.8.1+selenium实现登录滑块验证功能
May 22 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
Scrapy实现模拟登录的示例代码
Feb 21 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中基本符号及使用方法
2010/03/23 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
cakephp常见知识点汇总
2017/02/24 PHP
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
jQuery 中DOM 操作详解
2015/01/13 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
python2 对excel表格操作完整示例
2020/02/23 Python
django和flask哪个值得研究学习
2020/07/31 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
乔迁宴答谢词
2014/01/21 职场文书
安全大检查反思材料
2014/01/31 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
五年级学生评语
2014/04/22 职场文书
协议书的格式
2014/04/23 职场文书
创建文明城市标语
2014/06/16 职场文书
婚宴新娘致辞
2015/07/28 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书