1 *號、字典

1 、* 號的使用

使用*號代替所有:
1)統(tǒng)計下家庭作業(yè)的平均成績,但是排除掉第一個和最后一個分數(shù)。

def drop_first_last(grades):
    first, *middle, last = grades  # middle會生成為一個列表
    return avg(middle)

2)星號表達式也能用在列表的開始部分。比如,你有一個公司前 8 個月銷售數(shù)據(jù)的序列, 但是你想看下最近一個月數(shù)據(jù)和前面 7 個月的平均值的對比。你可以這樣做:

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

以上兩個例子中的 * 號,有點類似于正則匹配中的樣子,就是用 * 代替多個,組合成一個列表,此外號還可以作為 “解包” 的功能使用。
3)
作用于函數(shù)調(diào)用時的實際參數(shù),單星號對應(yīng)元組,雙星號對應(yīng)字典。對于元組,將元組中對應(yīng)值傳給對應(yīng)參數(shù),對于字典,將字典中對應(yīng)key-value對指定的值傳給對應(yīng)的參數(shù)。

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) 構(gòu)造函數(shù)會新建一個固定大小的隊列。當新的元素加入并且這個隊列已滿的時候, 最老的元素會自動被移除掉。
在隊列兩端插入或刪除元素時間復(fù)雜度都是 O(1) ,區(qū)別于列表,在列表的開頭插入或刪除元素的時間復(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)為了尋找兩個字典的相同點,可以簡單的在兩字典的 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)造一個排除幾個指定鍵的新字典。 下面利用字典推導(dǎo)來實現(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}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容