当前位置:   article > 正文

Python高级数据结构_python提供高效的高级数据结构还能简单有效的面向

python提供高效的高级数据结构还能简单有效的面向
数据结构

数据结构的概念很好理解,就是用来将数据组织在一起的结构。换句话说,数据结构是用来存储一系列关联数据的东西。在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})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

若要统计一个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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
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], &#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/777683
推荐阅读
相关标签
  

闽ICP备14008679号