【问题标题】:Are there more data structures available to Python (2.7) than the standard list, set, tuple dict in the standard library?Python(2.7)是否有比标准库中的标准列表、集合、元组字典更多的数据结构?
【发布时间】:2014-03-02 11:41:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python python-2.7 data-structures


    【解决方案1】:

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

    • 参见 collections 模块,了解 namedtuple、deque、Counters、OrderedDict 和 defaultdict。

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

    • 请参阅 numpy/scipy 了解 n 维矩阵数据类型,包括所有可以想到的线性代数,类似于 Matlab。

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

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

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

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

    • 请参阅queue 了解可用于线程安全传递消息的队列。

    • 请参阅collections.deque 了解双端队列,您可以在其中高效地添加和删除任一端的项目(但中间的随机访问成本更高)。

    • 请参阅 fractions 了解带有小数的老式数学的数据类型

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

    【讨论】:

      【解决方案2】:

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

      如果您想在 Python 标准库之外冒险,有许多提供其他结构的专用库。比如numpy就有一个很全面的array object,下面是他们的描述:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        相关资源
        最近更新 更多