Python高级数据结构

本文介绍了Python中的高级数据结构,包括Collections模块的Counter(), deque和defaultdict,Array的内存优化,Heapq的优先级队列,Bisect的有序列表维护,Weakref的弱引用概念以及Copy的浅拷贝和深拷贝。这些数据结构和函数提供了更加灵活和高效的解决方案,适用于各种场景。" 115061550,9564776,Linux用户及文件权限管理,"['Linux', '权限管理']
摘要由CSDN通过智能技术生成
数据结构

数据结构的概念很好理解,就是用来将数据组织在一起的结构。换句话说,数据结构是用来存储一系列关联数据的东西。在Python中有四种内建的数据结构,分别是List、Tuple、Dictionary以及Set。大部分的应用程序不需要其他类型的数据结构,但若是真需要也有很多高级数据结构可供选择,例如Collection、Array、Heapq、Bisect、Weakref、Copy以及Pprint。本文将介绍这些数据结构的用法,看看它们是如何帮助我们的应用程序的。

关于四种内建数据结构的使用方法很简单,并且网上有很多参考资料,因此本文将不会讨论它们。

1. Collections
1.1 Counter()

如果你想统计一个单词在给定的序列中一共出现了多少次,诸如此类的操作就可以用到Counter。来看看如何统计一个list中出现的item次数:

from collections import Counter

li = ["Dog", "Cat", "Mouse", 42, "Dog", 42, "Cat", "Dog"]
a = Counter(li)
print a 
#Counter({
  'Dog': 3, 42: 2, 'Cat': 2, 'Mouse': 1})

若要统计一个list中不同单词的数目,可以这么用:

from collections import Counter

li = ["Dog", "Cat", "Mouse", 42, "Dog", 42, "Cat", "Dog"]
a = Counter(li)
print a # Counter({'Dog': 3, 42: 2, 'Cat': 2, 'Mouse': 1})

print len(set(li)) # 4

如果需要对结果进行分组,可以这么做:

from collections import Counter

li = ["Dog", "Cat", "Mouse","Dog","Cat", "Dog"]
a = Counter(li)

print a # Counter({
  'Dog': 3, 'Cat': 2, 'Mouse': 1})

print "{0} : {1}".format(a.values(),a.keys())  # [1, 3, 2] : ['Mouse', 'Dog', 'Cat']

print(a.most_common(3)) # [('Dog', 3), ('Cat', 2), ('Mouse', 1)]
1.2 deque

deque即双头队列,队列元素能够在队列两端添加或删除。Deque支持线程安全的,经过优化的append和pop操作,在队列两端的相关操作都能达到近乎O(1)的时间复杂度

以下的例子是执行基本的队列操作:

from collections import deque
q = deque(range(5))
q.append(5)
q.appendleft(6)
print q
print q.pop()
print q.popleft()
print q.rotate(3)
print q
print q.rotate(-1)
print q

# deque([6, 0, 1, 2, 3, 4, 5])
# 5
# 6
# None
# deque([2, 3, 4, 0, 1])
# None
# deque([3, 4, 0, 1, 2])
1.3 defaultdict

当查找一个不存在的键操作发生时,它的default_factory会被调用,提供一个默认的值,并将这对键值存储下来。其他的参数同普通的字典一致。

defaultdict对象可以用来追踪单词的位置,如:

from collections import defaultdict

s = "the quick brown fox jumps over the lazy dog"

words = s.split()
location = defaultdict(list)
for m, n in enumerate(words):
    location[n].append(m)

print location

# defaultdict(<type 'list'>, {
  'brown': [2], 'lazy': [7], &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值