Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
作者:垄上行 发布时间:2023-04-27 19:46:34
标签:Python,数据结构与算法,序列
本文实例讲述了Python筛选及提取序列中元素的方法。分享给大家供大家参考,具体如下:
问题:提取出序列中的值或者根据某些标准对序列做删减
解决方案:列表推导式、生成器表达式、使用内建的filter()
函数
1、列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式
# Examples of different ways to filter data
mylist = [1, 4, -5, 10, -7, 2, 3, -1]
print('mylist=',mylist)
# 使用列表推导式
pos = [n for n in mylist if n > 0]
print('正数为:',pos)
neg = [n for n in mylist if n < 0]
print('负数为:',neg)
运行结果:
mylist= [1, 4, -5, 10, -7, 2, 3, -1]
正数为: [1, 4, 10, 2, 3]
负数为: [-5, -7, -1]
2、生成器表达式方法:
mylist = [1, 4, -5, 10, -7, 2, 3, -1]
print('mylist=',mylist)
# 使用生成器表达式
pos = (n for n in mylist if n > 0)
print('生成器为',pos)
for x in pos:
print(x)
运行结果:
mylist= [1, 4, -5, 10, -7, 2, 3, -1]
生成器为 <generator object <genexpr> at 0x02421FD0>
1
4
10
2
3
3、如果筛选标准无法简单表示在列表推导式或者生成器表达式中,比如筛选过程涉及一些异常处理或者更复杂的细节,可以考虑将处理筛选逻辑的代码放到单独的函数中,然后使用内建的filter()函数处理。
values=['1','2','-3','-','N/A','4','5','%']
def is_int(val): #将处理筛选逻辑的代码放到单独的函数
try:
x=int(val)
return True
except ValueError:
return False
ivals=list(filter(is_int,values)) #使用filter(func,list)进行过滤
print(ivals)
运行结果:
['1', '2', '-3', '4', '5']
filter(func,list)
会创建一个迭代器,如果想要列表形式的结果,需使用list()
将结果转为列表。
补充:
用新值替换掉不满足标准的值,而不是丢弃它们,可通过将筛选条件移到一个条件表达式中来轻松实现。
# Negative values clipped to 0
neg_clip = [n if n > 0 else 0 for n in mylist]
print('负数替换为0,结果:',neg_clip)
# Positive values clipped to 0
pos_clip = [n if n < 0 else 0 for n in mylist]
print('正数替换为0,结果:',pos_clip)
'''
运行结果:
mylist= [1, 4, -5, 10, -7, 2, 3, -1]
负数替换为0,结果: [1, 4, 0, 10, 0, 2, 3, 0]
正数替换为0,结果: [0, 0, -5, 0, -7, 0, 0, -1]
值得推荐的工具itertools.compress()
,它接受一个可迭代对象以及一个布尔选择器序列作为输入。
如果想把对一个序列的筛选结果施加到另一个相关的序列上时,就会非常有用。
# 采用筛选工具itertools.compress()
addresses = [
'5412 N CLARK',
'5148 N CLARK',
'5800 E 58TH',
'2122 N CLARK',
'5645 N RAVENSWOOD',
'1060 W ADDISON',
'4801 N BROADWAY',
'1039 W GRANVILLE',
]
counts = [ 0, 3, 10, 4, 1, 7, 6, 1]
from itertools import compress
more5 = [ n > 5 for n in counts ]
a = list(compress(addresses, more5))
print(a)
运行结果:
['5800 E 58TH', '1060 W ADDISON', '4801 N BROADWAY']
这里的关键是首先创建一个布尔序列,用来表示哪个元素可满足我们的条件。然后compress()
函数挑选出满足布尔值为True的相应元素。
同filter()
函数一样,正常情况下compress()
函数返回一个迭代器,若需要返回列表则需使用list()
将结果转为列表。
(代码摘自《Python Cookbook》)
希望本文所述对大家Python程序设计有所帮助。
来源:http://www.cnblogs.com/apple2016/p/5747529.html
0
投稿
猜你喜欢
- k-means算法思想较简单,说的通俗易懂点就是物以类聚,花了一点时间在python中实现k-means算法,k-means算法有本身的缺点
- PHP mysqli_set_charset()函数设置默认客户端字符集:<?php// 假定数据库用户名:root,密码:12345
- 其中 offset and fetch 最重要的新特性是 用来 分页,既然要分析 分页,就肯定要和之前的分页方式来比较了,特别是 Row_N
- Oracle的系统要求企业版:CPU最低PENTIUM200M推荐PENTIUMIII1G以上 内存最低128M推荐512M 硬盘空间系统盘
- <?php// 使用Memache 作为进程锁 class lock_processlock{// key 的前缀protected
- 在一个群上看到好几次问到call和apply的作用,function这两个方法的效果大家都很容易理解,但一般很难让人深刻地理解使用它们的时机
- 主要功能在copyFiles()函数里实现,如下:def copyFiles(src, dst): sr
- 程序还不是很精简,以后再修改,程序所用的数据库为-- “冯志宏”-- 所写的--“追捕”--软件中所带IP数据库和“国华软件 Guohua
- JavaScript中的64位加密及解密的两个方法。function base64Encode(text){if (/(
- 计算机键盘每天用得太多了,以致于我们无视它的存在(盲打),当然也很少有人去问这样一个问题——为什么键盘字母的排列方式是QWERTY而不是AB
- 今天写的代码片段:X = Y = []..X.append(x)Y.append(y)其中x和y是读取的每一个数据的xy值,打算将其归入列表
- 代码如下:--Begin Index(索引) 分析优化的相关 Sql -- 返回当前数据库所有碎片率大于25%的索引 -- 运行
- 作者:Jim Ley(主页)译者:Sheneyan(子乌)时间:2006.1.29英文原文:http://jibbering.com/200
- 创建测试dataframe:>>> import pandas as pd>>> df = pd.Dat
- pytho的使用和分发完全是免费的,它是一种面向对象的语言,它的。它的类模块支持多态,操作符重载和多重继承等高级概念,并且以python特有
- 除了第一年外,谷歌每年母亲节都会更换主页的logo以向全世界的母亲致敬。虽然2000年和2001年母亲节的logo图片看起来没什么不同,但是
- 1、IIS为一个死循的执行过程设定执行时间(缺省为90秒)超时事件:<%response.buffer=true%><BO
- php代码实现读取文件头判断文件类型,支持图片、rar、exe等后缀。案例:<?php $filename = "11.jp
- 为了能让PHP连接MSSQL,系统需要安装MSSQL,PHP,且在PHP.ini中的配置中,将 ;extension=
- JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定