Python(2.7)可用的数据结构是否比标准库中的标准列表、集合、元组dict更多



我一直在学习有关算法的coursera课程,在我看来,Python的数据结构集合不如那里提供的那样丰富。

Java的集合似乎更加多样化。

例如,如果我想让集合专门用于在末尾/中间插入,或者允许重复的排序数据结构。

我是否需要自己实现这些集合,或者我只是没有足够努力地寻找它们?

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

  • 请参阅集合模块中的namedtuple、deque、Counters、OrderedDict和defaultdict。

  • 请参阅堆的heapq模块,它可以用作优先级队列。

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

  • 有关图形数据类型和算法,请参阅networkx。

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

  • 有关在排序列表中搜索/插入的信息,请参见平分线。

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

  • 有关可用于线程安全传递消息的队列,请参阅队列。

  • 请参阅collections.deque,了解一个双端队列,您可以有效地向其中添加和删除两侧的项目(但中间的随机访问更昂贵)。

  • 有关分数的老式数学数据类型,请参见分数

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

还有很多(链接到他们的文档引用):

  • list
  • set
  • tuple
  • dict
  • OrderedDict
  • namedtuple
  • deque
  • Counter
  • defauldict
  • array
  • heapq
  • bisect

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

NumPy提供了一种N维数组类型ndarray描述了相同类型的"项"的集合。项目可以是使用例如N个整数进行索引。

所有ndarray都是同质的:每个项目都占用相同大小的块所有块都以完全相同的方式进行解释。怎样数组中要解释的每个项都由单独的数据类型对象,其中一个对象与每个数组相关联。在里面除了基本类型(整数、浮点等)之外,数据类型对象也可以表示数据结构。

从数组中提取的项目(例如通过索引)表示为Python对象,其类型是内置的数组标量类型之一麻木。数组标量允许轻松操作更多复杂的数据排列。

最新更新