Python(2.7)中是否有比标准库中的标准列表,set,tuple dict更多的数据结构?

vla*_*ean 2 python python-2.7 data-structures

我一直在阅读有关算法的课程,在我看来,Python没有像那里提供的那样丰富的数据结构集合.

Java的集合看起来更加多样化.

例如,如果我希望集合专门用于插入到末尾/中间,或者是一个允许重复的排序数据结构.

我是否需要为自己实施这些收藏,或者我是否只是不够努力地寻找它们?

Bas*_*els 12

Python的标准库和外部库包含许多其他数据结构:

  • 请参阅collectionstuple,deque,Counters,OrderedDict和defaultdict 的collections模块.

  • 请参阅heapq模块以获取堆,可用作优先级队列.

  • 对于n维矩阵数据类型,请参阅numpy/scipy,包括所有可思考的线性代数,类似于Matlab.

  • 有关图数据类型和算法,请参见networkx.

  • 请参阅blist以获取作为b树实现的列表,该列表在列表中间插入时具有更好的性能.

  • 请参阅bisect以在排序列表中搜索/插入.

  • 有关时间计算的数据类型,请参阅datetime.

  • 请参阅队列以获取可用于线程安全传递消息的队列.

  • 请参阅collections.deque以获取双端队列,您可以在其中有效地添加和删除任何一侧的项目(但中间的随机访问更加昂贵).

  • 请参阅具有小数的旧式数学数据类型的分数

可能很难找到一个尚未在Python中实现的数据类型,或者在某些带有Python绑定的C/fortran库中实现的数据类型.可能有一些数据类型,如链接列表,在Python中并不真正使用,因为有更好/更容易的替代方案.


Bur*_*lid 6

还有更多(链接到他们的文档参考):

如果您想在Python标准库之外冒险,那么有许多专门的库可以提供其他结构.numpy例如有一个非常全面的数组对象,以下是它们的描述:

NumPy提供了一个N维数组类型,即ndarray,它描述了相同类型的"项目"集合.可以使用例如N个整数来索引项目.

所有ndarray都是同质的:每个项都占用相同大小的内存块,并且所有块都以完全相同的方式解释.如何解释数组中的每个项目由单独的数据类型对象指定,其中一个对象与每个数组相关联.除了基本类型(整数,浮点数等)之外,数据类型对象还可以表示数据结构.

从数组中提取的项(例如,通过索引)由Python对象表示,其类型是Numpy中构建的数组标量类型之一.阵列标量允许容易地操纵更复杂的数据排列.