1 吹害、* 號(hào)的使用
使用*號(hào)代替所有:
1)統(tǒng)計(jì)下家庭作業(yè)的平均成績螟凭,但是排除掉第一個(gè)和最后一個(gè)分?jǐn)?shù)。
def drop_first_last(grades):
first, *middle, last = grades # middle會(huì)生成為一個(gè)列表
return avg(middle)
2)星號(hào)表達(dá)式也能用在列表的開始部分它呀。比如螺男,你有一個(gè)公司前 8 個(gè)月銷售數(shù)據(jù)的序列棒厘, 但是你想看下最近一個(gè)月數(shù)據(jù)和前面 7 個(gè)月的平均值的對(duì)比。你可以這樣做:
*trailing_qtrs, current_qtr = sales_record
trailing_avg = sum(trailing_qtrs) / len(trailing_qtrs)
return avg_comparison(trailing_avg, current_qtr)
以上兩個(gè)例子中的 * 號(hào)下隧,有點(diǎn)類似于正則匹配中的樣子奢人,就是用 * 代替多個(gè),組合成一個(gè)列表淆院,此外號(hào)還可以作為 “解包” 的功能使用何乎。
3) 作用于函數(shù)調(diào)用時(shí)的實(shí)際參數(shù),單星號(hào)對(duì)應(yīng)元組土辩,雙星號(hào)對(duì)應(yīng)字典支救。對(duì)于元組,將元組中對(duì)應(yīng)值傳給對(duì)應(yīng)參數(shù)拷淘,對(duì)于字典各墨,將字典中對(duì)應(yīng)key-value對(duì)指定的值傳給對(duì)應(yīng)的參數(shù)。
def sum(a, b):
return a + b
values = (1, 2)
s = sum(*values) # 等價(jià)于 : 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) 構(gòu)造函數(shù)會(huì)新建一個(gè)固定大小的隊(duì)列贬堵。當(dāng)新的元素加入并且這個(gè)隊(duì)列已滿的時(shí)候, 最老的元素會(huì)自動(dòng)被移除掉结洼。
在隊(duì)列兩端插入或刪除元素時(shí)間復(fù)雜度都是 O(1) 扁瓢,區(qū)別于列表,在列表的開頭插入或刪除元素的時(shí)間復(fù)雜度為 O(N) 补君。
參考:
http://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p03_keep_last_n_items.html
3引几、字典相關(guān)
1)zip()函數(shù)課將鍵和值反轉(zhuǎn)過來
2)可以使用 zip() 和 sorted() 函數(shù)來排列字典數(shù)據(jù)
3)為了尋找兩個(gè)字典的相同點(diǎn),可以簡單的在兩字典的 keys() 或者 items() 方法返回結(jié)果上執(zhí)行集合操作挽铁。
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) }
這些操作也可以用于修改或者過濾字典元素伟桅。 比如,假如你想以現(xiàn)有字典構(gòu)造一個(gè)排除幾個(gè)指定鍵的新字典叽掘。 下面利用字典推導(dǎo)來實(shí)現(xiàn)這樣的需求:
# 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}