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中使用MELIAE分析程序内存占用实例
Feb 18 Python
python 使用get_argument获取url query参数
Apr 28 Python
python实现八大排序算法(1)
Sep 14 Python
Python可迭代对象操作示例
May 07 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
Nov 17 Python
Python Parser的用法
May 12 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将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
js 操作css实现代码
2009/06/11 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
js实现烟花特效
2020/03/02 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
python套接字流重定向实例汇总
2016/03/03 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python视频按帧截取图片工具
2019/07/23 Python
python打印异常信息的两种实现方式
2019/12/24 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
如何理解python面向对象编程
2020/06/01 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
西雅图的买手店:Totokaelo
2019/10/19 全球购物
预备党员思想汇报
2014/01/08 职场文书
材料会计岗位职责
2014/03/06 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
收银员岗位职责
2015/02/03 职场文书
公司表扬信格式
2015/05/04 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers