python列表过滤的方法
短信预约 -IT技能 免费直播动态提醒
在python中,对列表这样的数据结构进行过滤,提取自己需要的元素,组成新的列表,是很常见的操作,这就要自然而然的用到列表过滤了,而常用的过滤当然就是循环后通过if进行,但是这样子,显然就是代码的开支有些大。
python中,提供了一个列表过滤的方式来做到这样的方式 :
[ mapping-expression for element in source-list if filter-expression ]
直接来一段示例,就能很快明了:
def filterForLi(li):
info = ">>>>>使用普通过滤列表<<<<<"
print info
out_data = [element for element in li if not isinstance(element,int) and len(element)>5] #int类型没有长度,所以需要首先排除
print out_data
# 定义一个列表
li = [1,2,3,4,5,"a","b","c","apple","banana","orange","juice"]
filterForLi(li)
代码中的:[element for element in li if not isinstance(element,int) and len(element)>5]
这部分就是过滤了
单独拆分:
1、
element
2、
for element in li
3、
if not isinstance(element,int) and len(element)>5
这样子看,就应该是很好懂了,就是for循环中,通过if对元素内容进行过滤处理,然后返回满足条件的元素,最终组装成新的列表
返回结果如下:
另外一种会用到的过滤,就是通过lambda函数进行,其实和这段列表过滤的原理一样,只是将if判断的部分通过lambda函数进行,完整的代码如下
# -*- coding:utf-8 -*-
# 列表过滤和使用lambda函数过滤
if __name__ == "__main__":
info = """>>>>>用来演示普通方式过滤列表和使用lambda函数过滤<<<<<"""
print info
# 使用普通列表过滤
def filterForLi(li):
info = ">>>>>使用普通过滤列表<<<<<"
print info
out_data = [element for element in li if not isinstance(element,int) and len(element)>5] #int类型没有长度,所以需要首先排除
print out_data
# 使用lambda函数过滤
def filterByLambda(li):
info = ">>>>>使用lambda函数进行列表信息过滤<<<<<"
print info
# 定义一个lambda函数:int类型没有长度,所以需要首先排除
g = lambda x : not isinstance(x,int) and len(x)>5
out_data = [element for element in li if g(element)]
print out_data
# 定义一个列表
li = [1,2,3,4,5,"a","b","c","apple","banana","orange","juice"]
# 分别调用两个函数:结果应该一样才准确
# 普通过滤
filterForLi(li)
# lambda函数过滤
filterByLambda(li)
运行结果如下:
以上这些就是常用到的一些进行列表元素过滤的方法了
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341