刚刚学习Python.阅读官方教程.我碰到了这个:
虽然列表末尾的追加和弹出很快,但是从列表的开头进行插入或弹出是很慢的(因为所有其他元素都必须移动一个).
我猜想像Python这样的成熟语言会有各种各样的优化,那么为什么Python [似乎]不会使用链接列表以便插入速度快?
Python 列表是使用对其他对象的引用的可调整大小的数组来实现的。与链表实现的 O(n) 查找相比,这提供了 O(1) 查找。
请参阅列表是如何实施的?
正如您所提到的,这种实现使得向 Python 列表的开头或中间的插入变慢,因为插入点右侧的数组中的每个元素都必须移动一个元素。此外,有时必须调整数组大小以容纳更多元素。对于插入到链表中,您仍然需要 O(n) 时间来找到要插入的位置,但实际插入本身将是 O(1),因为您只需要立即更改节点中的引用插入点之前和之后(假设是双向链表)。
所以让Python列表使用动态数组而不是链表的决定与语言实现的“成熟度”无关。不同数据结构之间存在简单的权衡,Python 的设计者认为动态数组是总体上的最佳选择。他们可能认为对列表进行索引比向列表中插入数据更常见,因此在这种情况下动态数组是更好的选择。
请参阅动态数组维基百科文章中的下表,了解各种数据结构性能特征的比较:
https://en.wikipedia.org/wiki/Dynamic_array#性能
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |