发布时间:2019-08-06 09:03:36编辑:auto阅读(1624)
在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)
运行结果如下:
以上这些就是常用到的一些进行列表元素过滤的方法了
上一篇: linux python3使用openc
下一篇: 《活法》3效仿前辈
47494
45794
36793
34324
28968
25598
24443
19611
19111
17632
5466°
6048°
5570°
5638°
6573°
5376°
5378°
5884°
5855°
7170°