我不是如何实现Python列表的专家,但据我所知,它们是作为动态数组而不是链接列表实现的。因此,我的问题是,如果将python列表实现为数组,为什么它们被称为“列表”而不是“数组”。
这只是一个语义问题还是有一些更深层次的技术原因。 Python中的动态数组实现是否接近列表实现?或者是因为动态数组实现使其行为更接近列表的行为而不是数组?或者其他一些我不理解的原因?
要明确的是,我并没有具体询问如何或为什么将Python列表实现为动态数组,尽管这可能与答案相关。
答案 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)。
希望它有所帮助。