为什么Python列表在实现为动态数组时称为“列表”

时间:2018-02-24 18:34:08

标签: python arrays list

我不是如何实现Python列表的专家,但据我所知,它们是作为动态数组而不是链接列表实现的。因此,我的问题是,如果将python列表实现为数组,为什么它们被称为“列表”而不是“数组”。

这只是一个语义问题还是有一些更深层次的技术原因。 Python中的动态数组实现是否接近列表实现?或者是因为动态数组实现使其行为更接近列表的行为而不是数组?或者其他一些我不理解的原因?

要明确的是,我并没有具体询问如何或为什么将Python列表实现为动态数组,尽管这可能与答案相关。

3 个答案:

答案 0 :(得分:6)

他们以list abstract data type而非链接列表命名。这类似于Java List界面和C#List<T>的命名。

答案 1 :(得分:0)

进一步阐述user2357112's answer,正如维基百科文章所指出的那样:

  

在计算机科学中,列表或序列是一种抽象数据类型   表示可数的有序值,其中值相同   可能不止一次出现。

此外,

  

列表数据类型通常使用数组数据结构或某种链接列表实现,但其他数据结构可能更适合某些应用程序。

在CPython中,列表是作为动态指针数组实现的,它们的行为比Array abstract data type更接近List抽象数据类型。从这个角度来看,&#39; List&#39;是准确的。

答案 2 :(得分:-1)

在实现列表的那一天结束时你想要的是常量(O(1))访问(a [i]),插入(a.append(i))和删除(a.remove(i) )次。使用链表时,这些操作中的一些操作可能与O(n)一样慢,即如果没有指向尾部的指针,则删除链表的最后一个元素。

使用动态数组,您可以获得持续的删除和访问时间,但是删除呢?在这里我们得到摊销的恒定时间。那是什么?如果数组中充满了N个元素,那么插入将采用O(N),最终将得到一个大小为2N的数组。这是一个罕见的事件,因此我们说我们已摊销O(1)。

希望它有所帮助。

来源: https://docs.python.org/2/faq/design.html