python標准庫之collections


數據類型

namedtupl

deque

Counter

OrderedDict

defaultdict

ChainMap

UserDict

UserList

UserString

在將這個之前先講下list和tuple

list列表

實例

//直接復制

classmates = ['Michael','bob','Tracy']

len(classmates)  長度

classmates[0]  加索引

classmates[-2] 表示倒數第二個元素

classmates.appen('Adam') 添加元素在尾部

classmates.insert(1,'Jack') 在制定位置插入元素,其他元素后移

classmates.pop() 刪除末尾的元素

classmates.pop(i)刪除指定位置元素

classmates[1] = 'Sarah' 把某個元素替換成別的元素

list中的元素類型也可以不同。例如

L=['Apple',123,True]

list中還可以包含list,例如 s=['python','java',['asp','php'],'scheme']

有s[2][1]='php'

空的list長度為0 

 

tuple 元組,有序列表,但是一旦初始化后就不能更改

classmates = (‘Michael’,'Bob','Tracy')注意使用小括號

tuple沒有append(),insert()方法

定義空tuple 

t = ()

注意一個陷阱,定義一個只有一個元素的tuple

t=(1,) 顯示的時候也是(1,)避免和數學意義上的括號混淆

t=(1) 實際上是 t=1 因為數學意義上認為是小括號

tuple的元素不變性質是指tuple中的每個元素'不變',假設tuple中有個是列表,那這個元素是列表a就是不變的,但是這個列表內部就可能發生改變

這里只講一下collections中的一些簡單用法

namedtuple 和字面意思一樣,創建一個自定義的tuple對象,並且規定了tuple元素的個數,並且可以使用屬性而不是索引來引用tuple的某個元素。

1 from collections import namedtuple
2 Point = namedtuple('Point',['x','y'])
3 p=Point(1,2)
View Code

p是對象Point的子類,而Point是tuple的子類

 

deque是為了實現高效實現插入和刪除的雙向列表,適用於隊列和棧

1  from collections import deque
2      q = deque(['a', 'b', 'c'])
3      q.append('x')
4      q.appendleft('y')

deque還有方法appendleft()和popleft() 來實現頭部添加和刪除元素

>>> q=co.deque(range(10))
>>> q[1]
1
>>> q.append('x')
>>> q.[10]
  File "<stdin>", line 1
    q.[10]
      ^
SyntaxError: invalid syntax
>>> q[10]
'x'
>>> q.appendleft(9)
>>> print(q)
deque([9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'x'])
>>>

defultdict 注意后面的dict

先來介紹下dict:  dict是python中內置的字典,全稱dictionary,在c++中稱為map,使用健-值存儲。

初始化用{}大括號,此外還能通過key進行存放

1 >>> map={1:233,2:333,3:555,'h':'tjj'}
2 >>> print(map)
3 {1: 233, 2: 333, 3: 555, 'h': 'tjj'}
4 >>> map['tt']='oki'
5 >>> print(map)
6 {1: 233, 2: 333, 3: 555, 'h': 'tjj', 'tt': 'oki'}
7 >>> map[1]
8 233

當map中key值不存在是,可能會報錯,為防止報錯,我們可以通過其他方式來取值

利用 in 來取值 

1 >>> 'o' in map
2 False
3 >>> 1 in map
4 True

利用dict中get方法,這里的get如果不存在該key會返回none或者你指定的值,比如-1

1 >>> map.get(2)
2 333
3 >>> map.get('ss')
4 >>> map.get('ss',-1)
5 -1

刪除其中一個值,利用pop()

1 >>> map.pop(2)
2 333
3 >>> print (map)
4 {1: 233, 3: 555, 'h': 'tjj', 'tt': 'oki'}
1 >>> map.keys()
2 dict_keys([1, 3, 'h', 'tt'])

還有需要注意的是dict中存放的順序與key中放入的順序無關

defaultdict 和它字面意思一樣,default+dict,它與dict唯一一點不同點在於:

使用dict時,如果key值不存在,會拋出KeyError錯誤,而defaultdict則可以避免這種情況

1 >>> from collections import defaultdict
2 >>> dd = defaultdict(lambda:'N/A')
3 >>> dd[key]=abc
4 >>> dd['key1']=1
5 >>> dd['key1']
6 1
7 >>> dd[2]
8 'N/A'

OrderedDict 毫無疑問,它肯定和dict有關。

使用dict時,key時無序的,在對dict做迭代時,我們無法確認key的順序。

而是用OrderedDict時,我們可以保持key的順序

 1 >>> d = dict([('a',1),('b',2),('c',3)])
 2 >>> from collections import OrderedDict
 3 >>> Od = OrderedDict([('a',1),('b',2),('c',3)])
 4 >>> d.keys
 5 <built-in method keys of dict object at 0x0000004B629E6360>
 6 >>> d.keys()
 7 dict_keys(['a', 'b', 'c'])
 8 >>> Od.keys()
 9 odict_keys(['a', 'b', 'c'])
10 >>> d
11 {'a': 1, 'b': 2, 'c': 3}

Od.popitem()會彈出最后一個元素 等同於Od.popitem(last = True)

Od.popitem(last = false) 會彈出第一個元素

Counter 簡單的計數器

1 >>> from collections import Counter
2 >>> c = Counter()
3 >>> for ch in 'programming':
4 ...     c[ch]+=1
5 ...
6 >>> c
7 Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})

Counter也是dict中的一個子類

 

 

參考:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001411031239400f7181f65f33a4623bc42276a605debf6000


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com