python标准库之collections

Posted xxlm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于python标准库之collections的主要内容,如果未能解决你的问题,请参考以下文章

python标准库之collections

python标准库之collections

标准库之collections

python标准库之sys模块 学习

Python常用标准库之fileinput

Python常用标准库之fileinput