美文网首页
1 *号、字典

1 *号、字典

作者: DancingChild | 来源:发表于2018-04-08 22:07 被阅读0次

    1 、* 号的使用

    使用*号代替所有:
    1)统计下家庭作业的平均成绩,但是排除掉第一个和最后一个分数。

    def drop_first_last(grades):
        first, *middle, last = grades  # middle会生成为一个列表
        return avg(middle)
    

    2)星号表达式也能用在列表的开始部分。比如,你有一个公司前 8 个月销售数据的序列, 但是你想看下最近一个月数据和前面 7 个月的平均值的对比。你可以这样做:

    *trailing_qtrs, current_qtr = sales_record
    trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs)
    return avg_comparison(trailing_avg, current_qtr)
    

    以上两个例子中的 * 号,有点类似于正则匹配中的样子,就是用 * 代替多个,组合成一个列表,此外号还可以作为 “解包” 的功能使用。
    3)
    作用于函数调用时的实际参数,单星号对应元组,双星号对应字典。对于元组,将元组中对应值传给对应参数,对于字典,将字典中对应key-value对指定的值传给对应的参数。

    def sum(a, b):
        return a + b
    
    values = (1, 2)
    s = sum(*values) # 等价于 : s = sum(1, 2)
    
    

    参考:
    http://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p02_unpack_elements_from_iterables.html

    2、collections.deque 的使用

    使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉。
    在队列两端插入或删除元素时间复杂度都是 O(1) ,区别于列表,在列表的开头插入或删除元素的时间复杂度为 O(N) 。
    参考:
    http://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p03_keep_last_n_items.html

    3、字典相关

    1)zip()函数课将键和值反转过来
    2)可以使用 zip() 和 sorted() 函数来排列字典数据
    3)为了寻找两个字典的相同点,可以简单的在两字典的 keys() 或者 items() 方法返回结果上执行集合操作。

    a = {
        'x' : 1,
        'y' : 2,
        'z' : 3
    }
    
    b = {
        'w' : 10,
        'x' : 11,
        'y' : 2
    }
    
    # Find keys in common
    a.keys() & b.keys() # { 'x', 'y' }
    # Find keys in a that are not in b
    a.keys() - b.keys() # { 'z' }
    # Find (key,value) pairs in common
    a.items() & b.items() # { ('y', 2) }
    

    这些操作也可以用于修改或者过滤字典元素。 比如,假如你想以现有字典构造一个排除几个指定键的新字典。 下面利用字典推导来实现这样的需求:

    # Make a new dictionary with certain keys removed
    c = {key:a[key] for key in a.keys() - {'z', 'w'}}
    # c is {'x': 1, 'y': 2}
    

    相关文章

      网友评论

          本文标题:1 *号、字典

          本文链接:https://www.haomeiwen.com/subject/pwimhftx.html