Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python的数据结构_Python_Data Structures - Fatal编程技术网

使用Python的数据结构

使用Python的数据结构,python,data-structures,Python,Data Structures,Python有很多方便的数据结构(列表、元组、dict、集合等),可以用来生成其他“常规”数据结构(例如,我可以使用Python列表创建堆栈和集合。dequeue生成队列,dict生成树和图等) 甚至还有可用于特定任务的第三方数据结构(例如Pandas、pytables等中的结构) 所以,如果我知道如何使用列表、dict、set等,如果我知道任何任意数据结构应该实现什么,我应该能够实现它吗 换句话说,Python数据结构不能用于什么样的数据结构 感谢因为所有数据结构都存在于内存中,而内存实际上只

Python有很多方便的数据结构(列表、元组、dict、集合等),可以用来生成其他“常规”数据结构(例如,我可以使用Python列表创建堆栈和集合。dequeue生成队列,dict生成树和图等)

甚至还有可用于特定任务的第三方数据结构(例如Pandas、pytables等中的结构)

所以,如果我知道如何使用列表、dict、set等,如果我知道任何任意数据结构应该实现什么,我应该能够实现它吗

换句话说,Python数据结构不能用于什么样的数据结构


感谢

因为所有数据结构都存在于内存中,而内存实际上只是一个
列表
(数组)。。。没有任何数据结构不能用基本的Python数据结构来表示(使用适当的代码与之交互)。

您可以使用Python数据结构来做任何您喜欢的事情。整个编程语言Lisp(现在人们使用Common Lisp或Scheme)是围绕链表数据结构构建的,Lisp程序员可以构建他们选择的任何数据结构


也就是说,有时有些数据结构的Python数据结构不是最佳选择。例如,如果您想要构建一个splay树,您应该滚动自己的或使用类似的开源项目。如果要解决内置数据结构的问题,请使用它们。否则,请超越内置的数据结构。像往常一样,使用最好的工具来完成工作。

对于一些简单的数据结构(例如堆栈),您可以使用内置列表来完成工作。对于更复杂的结构(例如bloomfilter),您必须使用语言支持的原语自己实现它们

你应该使用内置的,如果他们真的为你的目的,因为他们调试和优化了一大群人很长一段时间。自己从头开始做可能会产生一个劣质的数据结构。无论你使用的是Python、C++、C语言、java,不管怎样,你都应该首先查看内置的数据结构。它们通常使用与您自己使用的相同的系统原语来实现,但具有经过尝试和测试的优势

这些数据结构的组合(以及可能来自帮助器模块的一些函数,如和)通常足以实现现实编程中可能需要的最丰富的结构;然而,情况并非总是如此

只有当所提供的数据结构不允许您完成所需的任务,并且没有可供选择的可靠库时,您才应该考虑从头开始构建(或扩展所提供的内容)

让我们说,您需要比富Python库提供的更多的东西,考虑对象的属性(和集合中的项)实际上是指向其他对象(没有指针算术)的“指针”,即“可重新引用”,就像Python中的java一样。在Python中,通常在属性或项中使用<代码> NON/EXECUTE值来表示<代码> null > /CUL>将意味着在C++中或NULL>代码>将在java中表示。

例如,您可以通过以下方式实现二叉树:

class Node(object):

  __slots__ = 'data', 'left', 'right'

  def __init__(self, data=None, left=None, right=None):
    self.data  = data
    self.left  = left
    self.right = right
加上用于遍历和类似操作的方法或函数(类属性是可选的,主要是内存优化,以避免每个
节点
实例携带自己的
\uuuuuuuu dict\uuuuu
,这将大大大于所需的三个属性/引用)


数据结构的其他示例可能最好由专用Python类表示,而不是由其他现有Python结构的直接组合表示,包括
tries
(参见示例)和
graphs
(参见示例)。

我有时发现Python中缺少的一个明显的示例是“一包东西”。。更多信息请点击这里