zoukankan      html  css  js  c++  java
  • Python容器类型的过滤和解析技巧

    前言

    原博文:https://blog.csdn.net/wingforlearn/article/details/90272146

    讲述了诸多python技巧,我才读少许就觉得对我这个python小白代码的优化受益匪浅。

    美中不足的是只有代码,而且是python2的,其中有些语法需要相应自己转换到python3的版本,并且代码的具体意义需要自己花功夫去理解,但理解了之后你就会和我一样感叹这些技巧的精妙。

    这篇博文只挑出其中有关于容器类型的解析和过滤技巧,主要是怕自己忘(所以写下来的也是我自己懂就好了)。

    列表解析

    # 列表解析
    from random import randint
    
    data = [randint(-10, 10) for i in range(12)]
    filter(lambda x: x >= 0, data) 
    

    代码的功能是随机生成12个数,每个数都在(-10,10)之间,并且将这12个数放入data列表。再筛选出其中大于等于0的元素,将这些元素以迭代器对象的形式返回。

    首先是从random库中载入了一个randint的方法,它是用来生成随机整数的,并且你可以定这个随机整数的生成范围。然后构造了一个列表,这个列表有十二个元素,每个元素都在(-10,10)之间随机生成,生成完毕后装入列表,装满12个元素后,这个列表赋值给data。

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

    值得注意的是,这里的返回的迭代器对象,不能直接输出,需要用到for循环。

    如要直接输出,用list转换后再输出。

    a=list(filter(lambda x: x >= 0, data)) #转为列表就可以直接输出了。
    

    字典解析

    #字典解析
    d = {x: randint(60, 100) for x in range(10)}
    
    d_new={k: v for k, v in d.items() if v > 90} #这是一个字典
    

    代码的功能是:生成10个key:value形式的元素,每个元素中由x充当key,每个key对应的value则从(60,100)中随机生成,并将这十个元素放入字典d。随后过滤出所有value>90的元素,并将其所在的元素(key:value形式)装入字典d_new。

    集合解析

    # 集合解析
    data = [randint(-10, 10) for i in range(12)]
    s = set(data)
    s_new={x for x in s if x % 3 == 0}
    

    代码的功能是:随机生成12个数,每个数都在(-10,10)之间,并且将这12个数放入data列表。再将data列表强转成集合s。最后从集合s中挑选出可以整除3的元素放入新的集合s_new。

    #值得注意的是,列表形式的构造可以使用以下方法
    a=[randint(-10, 10) for i in range(12)] #构造完毕后这是一个列表
    type(a)='list'
    
    
    #而集合形式
    a=[randint(-10, 10) for i in range(12)] #构造完毕后这是一个迭代器
    type(a)='generator'
    

    剩下的就不解释了,这么聪明的你一定看得懂。

  • 相关阅读:
    spring3 上配置quartz 任务调度
    读取.properties配置信息
    mybatis 返回值
    div根据鼠标的移入移除显示隐藏
    jquery日期控件+时分秒
    mysql 插入多条记录,重复值不插入
    Hadoop中Writable类
    Hadoop中WritableComparable 和 comparator
    Hadoop序列化
    Hadoop压缩之MapReduce中使用压缩
  • 原文地址:https://www.cnblogs.com/Sheppard/p/11288942.html
Copyright © 2011-2022 走看看