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 代码效率的方法
Jul 03 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
matplotlib绘制动画代码示例
Jan 02 Python
Python冲顶大会 快来答题!
Jan 17 Python
python去掉空白行的多种实现代码
Mar 19 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
tensorflow实现逻辑回归模型
Sep 08 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Python面向对象特殊属性及方法解析
Sep 16 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中的integer类型使用分析
2010/07/27 PHP
微信access_token的获取开发示例
2015/04/16 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
解决浏览器会自动填充密码的问题
2017/04/28 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
一个基于flask的web应用诞生 记录用户账户登录状态(6)
2017/04/11 Python
Python函数式编程
2017/07/20 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
Python中使用双下划线防止类属性被覆盖问题
2019/06/27 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
机电一体化专业推荐信
2013/12/03 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
管理专员自荐信
2014/01/26 职场文书
电子信息工程专业推荐信
2014/02/14 职场文书
经典安踏广告词
2014/03/21 职场文书
食品采购员岗位职责
2014/04/14 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
就职演讲稿范文
2014/05/19 职场文书
班级团队活动方案
2014/08/14 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
python 实现图片特效处理
2022/04/03 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android