繁体   English   中英

当将Python列表实现为动态数组时,为什么将它们称为“列表”

[英]Why are Python Lists called 'lists' when they are implemented as dynamic arrays

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

这仅仅是语义问题,还是背后存在更深层的技术原因。 Python中的动态数组实现是否接近列表实现? 还是因为动态数组实现使它的行为比数组更接近列表的行为? 还是其他我不理解的原因?

明确地说,我并没有特别询问如何或为什么将Python列表实现为动态数组,尽管这可能与答案有关。

它们以列表抽象数据类型 (而不是链表)命名。 这类似于Java的List接口和C#的List<T>的命名。

如Wikipedia文章中所指出 ,要进一步阐述user2357112的答案

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

进一步,

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

在CPython中,列表被实现为指针的动态数组,并且其行为比Array抽象数据类型更接近List 抽象数据类型 从这个角度来看,“列表”的命名是准确的。

在实现列表的最后一天,您想要的是常量(O(1))访问(a [i]),插入(a.append(i))和delete(a.remove(i))的时间。 对于链表,某些操作可能会像O(n)一样慢,即,如果您没有指向末尾的指针,则删除链表的最后一个元素。

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

希望能帮助到你。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM