python标准库之collections,pythoncollections,数据类型namedt


数据类型

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 namedtuple2 Point = namedtuple(‘Point‘,[‘x‘,‘y‘])3 p=Point(1,2)
View Code

p是对象Point的子类,而Point是tuple的子类

deque是为了实现高效实现插入和删除的双向列表,适用于队列和栈

1  from collections import deque2      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 map2 False3 >>> 1 in map4 True

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

1 >>> map.get(2)2 3333 >>> map.get(‘ss‘)4 >>> map.get(‘ss‘,-1)5 -1

删除其中一个值,利用pop()

1 >>> map.pop(2)2 3333 >>> 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 defaultdict2 >>> dd = defaultdict(lambda:‘N/A‘)3 >>> dd[key]=abc4 >>> dd[‘key1‘]=15 >>> dd[‘key1‘]6 17 >>> 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 >>> d11 {‘a‘: 1, ‘b‘: 2, ‘c‘: 3}

Od.popitem()会弹出最后一个元素 等同于Od.popitem(last = True)

Od.popitem(last = false) 会弹出第一个元素

Counter 简单的计数器

1 >>> from collections import Counter2 >>> c = Counter()3 >>> for ch in ‘programming‘:4 ...     c[ch]+=15 ...6 >>> c7 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

python标准库之collections

评论关闭