小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python第十一章-常用的核心模塊01-collections模塊

 小世界的野孩子 2020-05-28

python 自稱 "Batteries included"(自帶電池, 自備干糧?), 就是因?yàn)樗峁┝撕芏鄡?nèi)置的模塊, 使用這些模塊無(wú)需安裝和配置即可使用.

本章主要介紹 python 的一些內(nèi)置常用核心模塊

Python 常用的核心模塊

一、collections模塊

這是個(gè)有用的容器模塊, 提供了許多有用的集合, 來(lái)彌補(bǔ)通用的內(nèi)置容器:list, dict, tuple, set

1.1 namedtuple()

namedtuple()是一個(gè)工廠函數(shù), 用來(lái)創(chuàng)建一個(gè)tuple的子類型namedtuple.

我們以前的tuple只能通過(guò)下標(biāo)去訪問(wèn), namedtuple訪問(wèn)元素的時(shí)候可以使用類似屬性的東西去訪問(wèn).


基本使用

from collections import namedtuple

# 參數(shù)1: 要?jiǎng)?chuàng)建的 tuple 的類型的名字 參數(shù)2:新類型擁有的屬性列表
# 返回的是個(gè)類, 這個(gè)類的類名就是 Point(參數(shù)1確定的) , 擁有兩個(gè)屬性 x, y
# 變量 Point 只是表示我們又重新定義了變量指向了返回的那個(gè)類而已
Point = namedtuple("Point", ["x", "y"])
print(Point)
print(issubclass(Point, tuple))  # 確實(shí)是 tuple 的子類

# 使用返回的類型創(chuàng)建一個(gè)對(duì)象, 這個(gè)對(duì)象就表示一個(gè)平面中的點(diǎn)
p1 = Point(x=10, y=20)
print(p1.x)
print(p1.y)

說(shuō)明:

  1. 從上面可以很容易的看出來(lái), 使用namedtuple可以很容易定義出一種數(shù)據(jù)類型
  2. 他具備tuple的不可變性, 又能根據(jù)屬性來(lái)引用, 一個(gè)字:用起來(lái)就是爽
  3. 定義一個(gè)表示平面的圓: Circle = namedtuple('Circle', ['x', 'y', 'r'])

繼承自tuple

由于namedtuple返回的類繼承自tuple, 所以tuple的屬性和方法在這里都可以使用.

比如用下標(biāo)去訪問(wèn), 用for去迭代等等.

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p1 = Point(x=10, y=20)

print(p1[0])
print(p1[1])

for i in p1:
    print(i)

3 個(gè)新增方法和 2 個(gè)新增屬性

類方法:_make(序列或迭代器)

從已知的序列或迭代器中創(chuàng)建一個(gè)實(shí)例

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])

nums = [20, 100]
p1 = Point._make(nums)
print(p1)

p2 = Point._make(range(10, 12))
print(p2)


實(shí)例方法:_asdict()

返回一個(gè)列表(從3.1f開始是一個(gè)OrderedDict)

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
d = p1._asdict()
print(d)


實(shí)例方法:_replace(關(guān)鍵字參數(shù))

更改某個(gè)屬性的值, 由于namedtuple是不可變的, 所以返回的是一個(gè)新的namedtuple實(shí)例對(duì)象

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
p2 = p1._replace(y=100)
print(p2)


類屬性:_source

返回創(chuàng)建的類的源碼

類屬性: _fields

返回創(chuàng)建類的所有屬性

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
print(Point._fields)

1.2 類:deque

deque是一個(gè)雙向隊(duì)列.

發(fā)音: deck 是 "double-ended queue" 的簡(jiǎn)寫

deque線程安全, 內(nèi)存高效, 支持在兩端添加和刪除元素.

相對(duì)list主要體現(xiàn)在添加和刪除效率比較高.


創(chuàng)建deque對(duì)象

deque([iterable[, maxlen]])
兩個(gè)參數(shù)都是可選
參數(shù)1: 可迭代對(duì)象, 會(huì)把里面的數(shù)據(jù)初始近雙端隊(duì)列中
參數(shù)2: 雙端隊(duì)列允許的最大長(zhǎng)度. 如果元素個(gè)數(shù)超出了這個(gè)只, 則只保留后面添加的.

from collections import deque

d = deque(range(10))
print(d)


方法和屬性

append(x)

隊(duì)列的右邊添加元素.
注意:對(duì)隊(duì)列來(lái)說(shuō), 左邊指隊(duì)首, 右邊指隊(duì)尾

appendleft(x)

在隊(duì)列的左邊添加元素

clear()

情況隊(duì)列中的所有元素, 然后長(zhǎng)度成為 0

copy()

淺復(fù)制隊(duì)列中的元素 (3.5新增)

count(x)

統(tǒng)計(jì)指定的元素 x 在隊(duì)里中出現(xiàn)的次數(shù)

extend(iterable)

向右擴(kuò)展隊(duì)列

extendleft(iterable)

向左擴(kuò)展隊(duì)列

index(x)

查找x在隊(duì)里中第一次出現(xiàn)的下標(biāo). 如果沒(méi)有找到, 則拋出異常

insert(i, x)

x插入到下標(biāo)為i的位置

pop()

刪除并返回最右邊的元素

popleft

刪除并返回最左邊的元素

remove(x)

刪除隊(duì)列中第一個(gè)x

reverse()

翻轉(zhuǎn)隊(duì)列中的元素

只讀屬性:maxlen

創(chuàng)建隊(duì)列的時(shí)候設(shè)定的允許的元素的最大個(gè)數(shù)

1.3 類:Counter

Counter用來(lái)統(tǒng)計(jì)集合中元素出現(xiàn)的次數(shù).

Counterdict的子類, 每個(gè)鍵值對(duì)都表示元素和元素出現(xiàn)的次數(shù).

創(chuàng)建Counter對(duì)象

Counter([iterable-or-mapping])

參數(shù):需要統(tǒng)計(jì)的迭代類型或mapping 類型

from collections import Counter

# 通過(guò)可迭代類型創(chuàng)建一個(gè) Counter
c1 = Counter("abcabc3344efg")

print(c1)

# 通過(guò) dict 創(chuàng)建一個(gè) Counter
c2 = Counter({"a": 3, "b": 4})    # 表示 a 出現(xiàn)了3次
print(c2)

# 通過(guò)關(guān)鍵字創(chuàng)建一個(gè) Counter
c3 = Counter(cats=4, dogs=8)    # 表示 cats 出現(xiàn)了4次
print(c3)


有用的幾個(gè)方法

elements()

根據(jù)統(tǒng)計(jì)結(jié)果, 返回一個(gè)包含所有元素的可迭代類型的對(duì)象

most_common(n)

返回出現(xiàn)次數(shù)最多的前n個(gè)元素

from collections import Counter

c1 = Counter("abcabc3344efg")
print(sorted(c1.elements()))    # 所有的元素
print(c1.most_common(2))

c2 = Counter({"a": 3, "b": 4})
print(sorted(c2.elements()))
print(c2.most_common(2))

c3 = Counter(cats=4, dogs=8)
print(sorted(c3.elements()))
print(c3.most_common(1))

1.4 類:defaultdict

在以前我們使用dict的時(shí)候, 如果訪問(wèn)不存在的key時(shí)會(huì)拋出異常. 使用defaultdict則可以避免這個(gè)問(wèn)題.

defaultdict(函數(shù))

說(shuō)明:

  1. 如果訪問(wèn)的key不存在, 則會(huì)調(diào)用傳遞的函數(shù), 把函數(shù)作為value
  2. 其余的使用和dict一樣
from collections import defaultdict

d = defaultdict(lambda: "默認(rèn)值")
d["b"] = "bbb"
# key 不存在, 則調(diào)用函數(shù), 把函數(shù)返回值作為值. 并把鍵值對(duì)存入到 defaultdict中
print(d["a"])    
print(d["b"])
print(d)


from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

d = defaultdict(list)
for k, v in s:
    d[k].append(v)
    

print(sorted(d.items()))


from collections import defaultdict
# 統(tǒng)計(jì)每個(gè)字符出現(xiàn)的次數(shù)
s = "abcdabAbc"

d = defaultdict(int)
for k in s:
    d[k] += 1
    

print(sorted(d.items()))

1.5 類:OrderedDict

dict的鍵值對(duì)是無(wú)序的.

ordereddict是可以記錄鍵值對(duì)的插入順序的dict.

from collections import OrderedDict

od = OrderedDict()
od["a"] = 10
od["c"] = 20
od["b"] = 40
for k, v in od.items():
    print(k + " : " + str(v))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多