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}