python列表过滤的方法

发布时间: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)

    运行结果如下:

        

    以上这些就是常用到的一些进行列表元素过滤的方法了

关键字