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中的高级数据结构详解
Mar 27 Python
C#返回当前系统所有可用驱动器符号的方法
Apr 18 Python
Python中编写ORM框架的入门指引
Apr 29 Python
python Django模板的使用方法
Jan 14 Python
python 系统调用的实例详解
Jul 11 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 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来检测proxy
2006/10/09 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
另一个javascript小测验(代码集合)
2011/07/27 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
wxPython框架类和面板类的使用实例
2014/09/28 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
粗加工管理制度
2014/02/04 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
公司员工安全协议书
2014/11/21 职场文书
个人政治思想总结
2015/03/05 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python