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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
python中使用sys模板和logging模块获取行号和函数名的方法
Apr 15 Python
python监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python中的函数作用域
May 07 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
python读取Excel表格文件的方法
Sep 02 Python
django项目中新增app的2种实现方法
Apr 01 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python与C/C++的相互调用案例
Mar 04 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
ext jquery 简单比较
2010/04/07 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python输入二维数组方法
2018/04/13 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
Python Web版语音合成实例详解
2019/07/16 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
Python进度条的制作代码实例
2019/08/31 Python
基于python监控程序是否关闭
2020/01/14 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
python实现学生通讯录管理系统
2021/02/25 Python
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
幼儿教育感言
2014/02/05 职场文书
考博专家推荐信
2014/05/10 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技