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的多重继承的理解
Aug 06 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
python实现随机漫步算法
Aug 27 Python
Django Rest framework之认证的实现代码
Dec 17 Python
python实现字符串加密成纯数字
Mar 19 Python
python实现名片管理系统项目
Apr 26 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
python文件编写好后如何实践
Jul 07 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
php读取xml实例代码
2010/01/28 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
基于python实现从尾到头打印链表
2019/11/02 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
元旦晚会主持词
2014/03/24 职场文书
婚前协议书怎么写
2014/04/15 职场文书
员工开除通知书
2015/04/25 职场文书
教师节随笔
2015/08/15 职场文书
电工实训心得体会
2016/01/14 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
导游词之凤凰古城
2019/10/22 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL