zoukankan      html  css  js  c++  java
  • python中那些让开发事半功倍的模块

    1. Map

      Map会将一个函数映射到一个输入列表的所有元素上

      ex: 有一个列表: [1,2,3,4,5,6], 现在要求把列表每个元素乘以10

      如果你还不知道Map,那你可能会这样做:

    list1 = [1,2,3,4,5,6]
    list2 = list()
    for i in list1:
        list2.append(i*10)
    print(list2)
    # output: [10, 20, 30, 40, 50, 60]

      以上写法没问题,但是不够pythonic。 接下来我们看下如何利用map让代码更加优雅吧!

      

    list1 = [1,2,3,4,5,6]
    list2 = map(lambda item:item*10, list1)
    print(list2)
    # output: <map object at 0x0000017CD1F4BE80>

      你可能会很奇怪: 为什么输出不是 [10, 20, 30, 40, 50, 60],其实是因为在python3中map返回的是一个迭代器对象 而在python2中返回的是一个就直接是list

      为了兼容:我们稍作修改:

      

    list1 = [1,2,3,4,5,6]
    list2 = list(map(lambda item:item*10, list1))
    print(list2)
    # output:
        [10, 20, 30, 40, 50, 60]

      

    2. Filter

      Filter用于过滤列表中的元素,并返回一个满足过滤条件的元素的列表

    list1 = [1,2,3,4,5,6]
    list2 = list(filter(lambda item: item > 3, list1))
    print(list2)
    # output: [4, 5, 6]

        

    3. Reduce

      Reduce是一个可以对列表进行计算的高阶函数,例如计算一组数据的乘积

      

    from functools import reduce
    list1 = [1,2,3,4,5,6]
    list2 = reduce(lambda x, y: x*y, list1)
    print(list2)
    # output: 720

    4. Collections(容器)

      Collections是一个包含诸多容器数据类型的模块(枚举),常用的有:

      1. defaultdict
      2. counter
      3. deque
      4. namedtuple
      5. enum.Enum

       defaultdict

          这个模块与dict的不同在于不需要检查dict的key是否存在,defaultdict()方法会为字典提供默认值:

          在dict中,给字典进行嵌套赋值时,必须保证key存在,否则会触发KeyError的异常:

          

    mydict = {}
    mydict['userInfo']['age'] = 30
    print(mydict)
    # output:
    # Traceback (most recent call last):
    #  File "sd.py", line 21, in <module>
    #    mydict['userInfo']['age'] = 30
    #  KeyError: 'userInfo' 

        让我们换defaultdict试试:

      

    import collections
    defaultdictTree = lambda : collections.defaultdict(dict)
    mydefault = defaultdictTree()
    mydefault['userInfo']['age'] = 30
    print(mydefault)
    print(dict(mydefault))
    # output:
    #defaultdict(<class 'dict'>, {'userInfo': {'age': 30}})
    #{'userInfo': {'age': 30}}

       counter

       counter是一个计数器,用于统计数据。当前他还可以统计一个文件,如果你需要.

    import collections
    result = collections.Counter('我是一个中国人, 我爱中国')
    print(result)
    # output: Counter({'我': 2, '中': 2, '国': 2, '是': 1, '一': 1, '个': 1, '人': 1, ',': 1, ' ': 1, '爱': 1})

       

      deque

         deque是一个双端队列,允许从两头插入删除元素

      

    from collections import deque
    mydeque = deque()
    # 向后添加
    mydeque.append('a')
    mydeque.append('b')
    mydeque.append('c')
    print(mydeque)
    
    # 向前添加
    mydeque.appendleft('1')
    print(mydeque)
    
    # 从后删除
    mydeque.pop()
    print(mydeque)
    
    # 从前删除
    mydeque.popleft()
    print(mydeque)
    
    # 向后合并拓展
    mydeque.extend(['d', 'e'])
    print(mydeque)
    
    # 向前合并拓展
    mydeque.extendleft(['8','9'])
    print(mydeque)

    # output:

    #deque(['a', 'b', 'c'])
    #deque(['1', 'a', 'b', 'c'])
    #deque(['1', 'a', 'b'])
    #deque(['a', 'b'])
    #deque(['a', 'b', 'd', 'e'])
    #deque(['9', '8', 'a', 'b', 'd', 'e'])

      定长队列

      

    mydeque = deque(maxlen=5)  # 定长队列,超出长度,最左边的元素将被删除
    mydeque.extend([1,2,3,4])
    print(mydeque)
    mydeque.append(5)
    print(mydeque)
    mydeque.append(6)
    print(mydeque)
    
    # output
    #deque([1, 2, 3, 4], maxlen=5)
    #deque([1, 2, 3, 4, 5], maxlen=5)
    #deque([2, 3, 4, 5, 6], maxlen=5)

        

        

  • 相关阅读:
    PLSQL游标
    SqlHelper助手
    机房重构前奏——三层转七层
    应用运筹管理经济
    C++——宏观把控
    操作系统——宏观把控
    .NET总结一
    深复制与浅复制
    设计模式之结构型
    设计模式之一对多
  • 原文地址:https://www.cnblogs.com/wangbaojun/p/12531125.html
Copyright © 2011-2022 走看看