• python三大类型数据筛选


    如何在列表,字典,集合中根据条件刷选数据

    说明:

    本文分析的类型:

    • 列表
    • 字典
    • 集合

    结合每种类型筛选数据的方法的不同,区分出方法间的差异。

    一、列表案例

    需求:过滤掉列表中的负数。

    li = [1,5,-3,-1,0,9,-10,10]

    1、通用方法:迭代列表获取列表中的每个元素进行选择

    代码:

    li = [1, 5, -3, -1, 0, 9, -10, 10]
    
    ret = []
    for i in li:
        if i >= 0:
            ret.append(i)
    print(ret)

    2、filter函数

    语法:filter(lambda x: x >= 0, data)

    li = [1, 5, -3, -1, 0, 9, -10, 10]
    new_li = []
    ret = filter(lambda x: x >= 0, li)
    print(ret)
    for i in ret:
        new_li.append(i)
    print(new_li)
    filter

    结果:

    <filter object at 0x0178A4B0>
    [1, 5, 0, 9, 10]

    说明:

    filter直接返回的结果是一个课迭代对象。要想获取其中的数据要对filter结果进行遍历。

    上面的代码也可以简写:

    li = [1, 5, -3, -1, 0, 9, -10, 10]
    new_li = []
    ret = [x for x in filter(lambda x: x >= 0, li)]
    print(ret)
    简写

    3、列表解析

    li = [1, 5, -3, -1, 0, 9, -10, 10]
    
    ret = [x for x in li if x >= 0]
    print(ret)
    列表解析

    说明:

    列表解析,直接在”[ ]”中操作,将判断条件写在了列表解析中。

    问题:既然都能得出结果,那filter和列表解析那个好那?

    我们可以通过测试两段代码执行的时间。

    import timeit
    
    li = [1, 5, -3, -1, 0, 9, -10, 10]
    
    t1 = timeit.Timer('[x for x in filter(lambda x: x >= 0, %s)]' % li)
    t2 = timeit.Timer('[x for x in %s if x >= 0]' % li)
    
    print(t1.timeit())
    print(t2.timeit())
    比较

    结果:

    1.9449847999118903
    0.865514452222458

    说明:

    1、结果可以明显看出,列表解析所用的时间是filter的时间的一半左右,即,列表解析最快,所以推荐使用列表解析。

    2、这2中方式都是远快于使用 for 这种迭代方式的。

    二、字典案例

    需求:筛选出value值高于90的项。

    dic = {‘haha’:79, ‘heihei’:88, ‘hehe’:95, ‘xxx’:100}

    1、普通方法

    dic = {'haha': 79, 'heihei': 88, 'hehe': 95, 'xxx': 100}
    new_dic = {}
    for k,v in dic.items():
        if v >= 90:
            new_dic[k] = v
    
    print(new_dic)

    结果:

    {'hehe': 95, 'xxx': 100}

    2、字典解析

    dic = {'haha': 79, 'heihei': 88, 'hehe': 95, 'xxx': 100}
    
    ret = {k: v for k, v in dic.items() if v >= 90}
    print(ret)
    字典解析

    说明:

    字典解析运行时间远快于普通方法。

    三、集合案例

    需求:筛选出集合中能被3整除的元素。

    s = {77,88,99,6,15,20}

    1、普通方法

    s = {77, 88, 99, 6, 15, 20}
    new_s = set()
    for i in s:
        if i % 3 == 0:
            new_s.add(i)
    print(new_s)

    结果:

    {99, 6, 15}

    2、集合解析

    s = {77, 88, 99, 6, 15, 20}
    
    ret = {x for x in s if x % 3 == 0}
    print(ret)
    集合解析

    说明:

    集合解析也是远快于普通for循环的。

  • 相关阅读:
    0_ReviewML-1
    1_Convolution(卷积)
    0_overview
    遗传算法
    使用多线程下载文件思路
    大文件断点下载
    输出流
    大文件的下载
    XML解析
    文件下载
  • 原文地址:https://www.cnblogs.com/jayafs/p/6201036.html
Copyright © 2020-2023  润新知