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备份Mysql脚本
Aug 11 Python
使用go和python递归删除.ds store文件的方法
Jan 22 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
python中for用来遍历range函数的方法
Jun 08 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
有关Python的22个编程技巧
Aug 29 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
pytorch 如何使用float64训练
May 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
php无限级分类实现方法分析
2016/10/19 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
区分JS中的undefined,null,&quot;&quot;,0和false
2007/03/08 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
js如何打印object对象
2015/10/16 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
英国绿色商店:Natural Collection
2019/05/03 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
原料仓仓管员岗位职责
2014/07/08 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
班主任培训研修日志
2015/11/13 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
Java中的Kotlin 内部类原理
2022/06/16 Java/Android