赞
踩
在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)
运行结果如下:
以上这些就是常用到的一些进行列表元素过滤的方法了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。