Python的数据结构整理

一、字典

别名:maps, hashmaps, lookup tables, associative arrays

创建:a={'a':'b'}

优点:对于查找,插入,更新以及删除,时间复杂度为O(1)

变种:

1.collections.OrderedDict

可以记住插入顺序的字典

importcollections

d=collections.OrderedDict(a=1,b=2)

d

Out[3]: OrderedDict([('a', 1), ('b', 2)])

d['c']=3

d

Out[5]: OrderedDict([('a', 1), ('b', 2),('c', 3)])

2.collections.defaultdict

如果没有查到对应的key值,返回默认值的字典

d=collections.defaultdict(list)

d['a'].append(1)

d

Out[12]: defaultdict(list, {'a': [1]})

3.collections.ChainMap

可以当作一个字典去查找多个字典

a={'a':1}

b={'b':2}

chain=collections.ChainMap(a,b)

chain['a']

Out[17]: 1

4. types.MappingProxyType

给字典提供一个只读的视图对象

writable = {'a':1}

import types

read_only = types.MappingProxyType(writable)

read_only['a']

Out[21]: 1

read_only['a']=2

Traceback (most recent call last):

File"<ipython-input-22-5f97afe708c4>", line 1, in <module>

read_only['a']=2

TypeError: 'mappingproxy' object does not support item assignment

writable['b']=2

read_only['b']

Out[24]: 2

二、序列

1.list

可变的动态序列

A=[1,2,3]

2.tuple

不可变的容器

A=(1,2,3)

3.array.array

提供基本的类型序列,存储在里面的序列都是已确定好类型,其实就是C的数组

import array

arr = array.array('f', (1,2,3))

arr

Out[27]: array('f', [1.0, 2.0, 3.0])

4.str

字符串

A=’dad’

5.bytes

不可变的单字节序列

arr=bytes((0,1,))

arr

Out[29]: b'\x00\x01'

6.bytearray

可变的单字节序列

arr=bytearray((0,1,))

arr

Out[31]: bytearray(b'\x00\x01')

7.collections.namedtuple

带名字的tuple,tuple的元素每个都具有自己的名字

tuple1 = collections.namedtuple('test','ab')(1,2)

tuple1

Out[34]: test(a=1, b=2)

三、集合

1.set

无序,内部元素唯一的集合,查找效率是O(1)

A={1,2,3}

2.frozenset

不可变集合

a=frozenset({1,2,3})

3.collections.Counter

内部存储着元素更新次数的集合

a=collections.Counter()

a.update({'a':2})

a

Out[43]: Counter({'a': 2})

a.update({'a':1,'b':2})

a

Out[45]: Counter({'a': 3, 'b': 2})

四、Stacks

1.collections.deque

兼具效率和健壮性的栈

a=collections.deque()

a.append('a')

a.append('b')

a.pop()

Out[49]: 'b'

2.queue.LifoQueue

内置了锁功能的栈,可用于生产者消费者模式的并行

import queue

a=queue.LifoQueue()

a.put('a')

a.put('b')

a.get('a')

Out[54]: 'b'

五、Queues

1.queue.Queue

内置了锁功能的队列,可用于生产者消费者模式的并行

a=queue.Queue()

a.put('a')

a.put('b')

a.get()

Out[61]: 'a'

2. multiprocessing.Queue

可在Job间共享的队列

import multiprocessing

a=multiprocessing.Queue()

a.put('a')

a.put('b')

a.get()

Out[66]: 'a'

六、Prioritity Queues

1.heapq

内部保证相对有序的队列

import heapq

q=[]

heapq.heappush(q,(2,'b'))

heapq.heappush(q,(1,'a'))

heapq.heappush(q,(3,'c'))

while q:

print(heapq.heappop(q))

(1, 'a')

(2, 'b')

(3, 'c')

2. queue.PriorityQueue

支持并发的优先队列

q=queue.PriorityQueue()

q.put((2,'b'))

q.put((1,'a'))

q.put((3,'c'))

while not q.empty():

print(q.get())

(1, 'a')

(2, 'b')

(3, 'c')

原文发布于微信公众号 - 鸿的学习笔记(shujuxuexizhilu)

原文发表时间:2018-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青青天空树

C语言中把数字转换为字符串 【转】

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者...

2.5K5
来自专栏编程札记

python深坑之迭代器和生成器

2024
来自专栏Micro_awake web

javascript(三):对象

 对象(object)是javascript中很重要的数据类型。对象是“键值对”的集合,同时也是无序的。(注意:对象结尾处有分号) 1 var ob1={ ...

19810
来自专栏技术小黑屋

Java中的字符串常量池

Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String...

1522
来自专栏Golang语言社区

深入分析golang多值返回以及闭包的实现

一、前言 golang有很多新颖的特性,不知道大家的使用的时候,有没想过,这些特性是如何实现的?当然你可能会说,不了解这些特性好像也不影响自己使用golang,...

4746
来自专栏Python

while补充,字符串和数字的内置方法

一、while循环的补充 while True: name=input('please input your name: ') password...

2597
来自专栏极客编程

ECMAScript 6教程 (二) 对象和函数

上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。

1054
来自专栏coder修行路

Java基础(三)面向对象(下)

成员常量:public static final 成员函数:public abstract

980
来自专栏猿人谷

C++ primer里的template用法

template 的用法     在程序设计当中经常会出现使用同种数据结构的不同实例的情况。例如:在一个程序中     可以使用多个队列、树、图等结构来组织数据...

2185
来自专栏你不就像风一样

一文看透Java8新特性:lambda表达式和Stream API

借用引言中的示例,在调用new Thread的含参构造方法时,我们通过匿名内部类的方式实现了Runnable对象,但其实有用的代码只有System.out.pr...

1101

扫码关注云+社区

领取腾讯云代金券