• Python Cook函数笔记 【第一章】


    2017年4月28日 19:29:52

    • 解压赋值给多个变量

    可迭代的对象(list,tuple,string,文件对象,迭代器,生成器等),都可以进行解压赋值给多个对象。

     1 #!/usr/bin/env python2
     2 
     3 str = 'Hello'
     4 a,b,c,_,e = str
     5 
     6 #a='H',b='e',c='l',e='o'
     7 
     8 
     9 #!/usr/bin/env python3
    10 #python3中才支持*
    11 
    12 str = 'Hello'
    13 a,*b,c=str
    14 
    15 #a='H',b=['e','l','l'],c='o'
    • deque()

    内置模块collections中的一个函数。

      1. deque(maxlen=N):构造一个固定大小的队列,加入新元素时,将自动剔除最老的元素

    >>> from collections import deque
    >>> alist = deque(maxlen=3)
    >>> alist.append(1)
    >>> alist.append(2)
    >>> alist.append(3)
    >>> alist
    deque([1, 2, 3], maxlen=3)
    >>> alist.append(4)
    >>> alist
    deque([2, 3, 4], maxlen=3)

      2. deque()一个功能是两边都可以编辑(添加,删除)

    >>> from collections import deque
    >>> alist = deque([4,5,6])
    >>> alist.appendleft(3) #左边添加
    >>> alist
    deque([3, 4, 5, 6])
    >>> alist.extendleft([1,2]) #左边扩展,注意扩展顺序
    >>> alist
    deque([2, 1, 3, 4, 5, 6])
    >>> alist.popleft() #左边删除,pop()不用传参,只能一个一个删除
    2
    >>> alist
    deque([1, 3, 4, 5, 6])
    • nlargest()和nsmallest()

    查找最大或最小的N个元素列表

    >>> import heapq
    >>> nums=[25,32,12,6,8,4,76]
    >>> heapq.nlargest(3,nums)  #最大的三个原素
    [76, 32, 25]
    >>> heapq.nsmallest(3,nums) #最小的三个原素
    [4, 6, 8]

    如果N接近于列表大小,则应该使用sorted(), 这个函数不是heapq模块里的

    >>> sorted(nums)
    [4, 6, 8, 12, 25, 32, 76]

    如果只查找最大或者最小的,则应使用max()和min()

    >>> max(nums)
    76
    >>> min(nums)
    4

    附:关于heap模块请查阅:官方文档

    • 设置字典默认的几种方法

      1. 使用dict.setdefault()方法

    >>>strings = ('puppy', 'kitten', 'puppy', 'puppy', 'weasel', 'puppy', 'kitten', 'puppy')
    >>>counts=dict()
    >>>for kw in strings:
                counts.setdefault(kw, 0)
                counts[kw] += 1
    >>>counts
    {'puppy': 5, 'weasel': 1, 'kitten': 2}

    dict.setdefault(key,fault_value)方法接收两个参数,第一个参数是健的名称,第二个参数是默认值。

      2. 使用collections.defaultdict

    >>> from collections import defaultdict
    >>> dict_list = defaultdict(list)  #字典中每个value都是一个列表
    >>> dict_set = defaultdict(set)  #字典中每个value都是一个集合,值不能重复
    >>> def zero():
            return 0
    >>> dict_num1 = defaultdict(zero) #字典中每个键的默认都是0,参数只能是函数方法,不能是数值,也就是说不能写成defaultdict(0)
    >>> dict_num2 =defaultdict(lambda:0) #字典每个键都是默认值0,和上面的效果一样,写法更简洁
    >>> dict_list
    defaultdict(<type 'list'>, {})
    >>> dict_set
    defaultdict(<type 'set'>, {})
    >>> dict_num1
    defaultdict(<function zero at 0x0000000002B3FB38>, {})
    >>> dict_num2
    defaultdict(<function <lambda> at 0x0000000002AEDAC8>, {})
    
    
    >>> dict_list['a'].append('No1')  #注意list只能用append添加
    >>> dict_list['a'].append('No1')  
    >>> dict_list['a']
    ['No1', 'No1']                #是一个list,可以重复
    
    >>> dict_set['b'].add('No1')  #注意set只能用add添加
    >>> dict_set['b'].add('No1')
    >>> dict_set['b']
    set(['No1'])                  #是一个set,不可以重复
    
    >>> dict_num1['c']
    0
    
    >>> dict_num2['d']
    0

     参考文章:python中defaultdict方法的使用

    • zip()的使用

     基本原理介绍

    >>> x = [1, 2, 3]
    >>> y = [4, 5, 6]
    >>> z = [7, 8, 9]
    >>> new_list = zip(x,y,z)
    >>> new_list
    [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    >>> new_list_1 = zip(*new_list)
    >>> new_list_1
    [(1, 2, 3), (4, 5, 6), (7, 8, 9)]

     

    常用经典用法:反转字典

    >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    >>> m.keys()
    ['a', 'c', 'b', 'd']
    >>> m.values()
    [1, 3, 2, 4]
    >>> re_list = zip(m.values(),m.keys())
    >>> re_dict = dict(re_list)
    >>> re_dict
    {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
    • 删除序列相同元素并保持顺序

      1. 仅仅删除重复元素

    >>> alist = [1,4,2,1,7,2,4]
    >>> blist = set(alist)
    >>> blist
    set([1, 2, 4, 7])

      2. 保持顺序(定义一个函数)

    #第一种方法
    >>> a = [1, 4, 2, 1, 7, 2, 4]
    >>> b = list(set(a))
    >>> b.sort(key=a.index)
    >>> b
    [1, 4, 2, 7]
    
    #第二种方法
    >>> def dedupe(items):
    ...     new_items = []
    ...     for item in items:
    ...         if item not in new_items:
    ...             new_items.append(item)
    ...     return new_items
    ...
    >>> a = [1, 4, 2, 1, 7, 2, 4]
    >>> print dedupe(a)
    [1, 4, 2, 7]
    • 查询序列中元素出现的频率

      collections标准库中的Counter方法:collections.Counter

      1. 创建实例,应用对象是所有可迭代对象:字符串,list,tuple,dict等

    >>> from collections import Counter
    >>> str_counter = Counter('hello')  #字符串
    >>> str_counter
    Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
    >>> list_counter = Counter(['Tom','Jay','Bill','Jay'])  #list
    >>> list_counter
    Counter({'Jay': 2, 'Bill': 1, 'Tom': 1})
    >>> tuple_counter = Counter(('Tom','Jay','Bill','Jay')) #tuple
    >>> tuple_counter
    Counter({'Jay': 2, 'Bill': 1, 'Tom': 1})
    >>> dict_counter = Counter({'math':89,'english':76,'chinese':86}) #dict
    >>> dict_counter
    Counter({'math': 89, 'chinese': 86, 'english': 76})

      2. 查询出现的频率

    >>> list_counter['Jay'] #查询某元素出现的频率
    2
    >>> list_counter.most_common(2)  #查询出现频率最高的两个
    [('Jay', 2), ('Bill', 1)]
    
    >>> str_counter
    Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
    >>> str_counter.update('length')   #更新(添加),频率做加法
    >>> str_counter
    Counter({'l': 3, 'e': 2, 'h': 2, 'g': 1, 'o': 1, 'n': 1, 't': 1})
    
    >>> str_counter.subtract('long')   #更新(删除),频率做减法
    >>> str_counter
    Counter({'e': 2, 'h': 2, 'l': 2, 't': 1, 'g': 0, 'o': 0, 'n': 0})
    
    #上面有元素频率为0,如若要删除,应使用del
    >>> del str_counter['n']
    >>> str_counter
    Counter({'e': 2, 'h': 2, 'l': 2, 't': 1, 'g': 0, 'o': 0})
    •  对字典的操作运算

      1. 对字典的值排序,筛选,并找出相对应的键值

    #coding:utf-8
    
    import heapq
    score={'Tom':75,'Jay':64,'Ben':94,'Micheal':84}
    #找出成绩最好的那名同学名字
    print max(zip(score.values(),score.keys()))
    #(94, 'Ben')
    
    #找出成绩前两名的同学
    print heapq.nlargest(2,zip(score.values(),score.keys()))
    #[(94, 'Ben'), (84, 'Micheal')]
    
    #找出成绩在80-90区间的同学
    def func(x):
        return x[0]>80 and x[0]<90
    
    print filter(func,zip(score.values(),score.keys()))
    #[(84, 'Micheal')]
    
    将成绩进行排序
    print sorted(zip(score.values(),score.keys()))
    #[(64, 'Jay'), (75, 'Tom'), (84, 'Micheal'), (94, 'Ben')]

      上面的方法是一种方法,如果单纯要筛选最大值和最小值,还可以借助max和min的key实现:相关的可参考:max/min函数的用法

    score={'Tom':75,'Jay':64,'Ben':94,'Micheal':84}
    #找出成绩最好的那名同学名字
    print max(score,key=lambda k:score[k])
    #Ben

      2. 找出两字典的相同点

        2.1 相同的键和值

  • 相关阅读:
    [转]MySql 5.7关键字和保留字-附表
    [转]超链接标签简单的几个样式属性
    layui table 前台数字格式保留两位小数,不足补0(mysql 数据库)
    [转]Object.keys()和for in的排序问题
    [转]对form:input标签中的数字进行格式化
    [转]bootstrap table 动态列数
    [转]bootstrap的table插件动态加载表头
    [转]【MyBatis】Decimal映射到实体类出现科学计数法问题
    [转]MySQL函数大全 及用法示例
    [转]mysql update case when和where之间的注意事项
  • 原文地址:https://www.cnblogs.com/wongbingming/p/6783668.html
Copyright © 2020-2023  润新知