python数据结构与算法之list


1. 数据结构的操作

作为一种包含元素的数据结构,需要提供一些“标准”操作:

  • 创建和销毁
  • 判断是否空,如果容量有限,还需判断是否满
  • 向结构中加入元素或从中删除
  • 访问结构里的元素

不同的编程语言可能影响需要实现的操作:

由于python能自动回收不用的对象,因此不需要销毁结构的操作


2. 从支持操作类型的角度看,数据结构可分为两类:

  • 不变数据结构,如python中的tuple和frozenset
  • 变动数据结构,如python中的list,dict,set

3. python的list

list是一种线性结构,可看作线性表的一种实现:

  • 基于下标(位置)的元素访问和更新操作,复杂性为O(1)
  • 允许任意加入元素,而且维持表对象标识不变(id())

list实现约束和解决方案:

  • 要求O(1)的元素访问并维持元素的顺序,只能采用连续表技术,元素保存在一块连续存储区
  • 要能容纳任意多个元素,必须在元素个数将要超出存储区容量时换一块更大的存储区。要想在替换存储时id不变,只能采用分离式实现

list里元素越多,换一次存储区的代价也越高:

  • 要想平均结果较好,随着表长度增加,换存储区的频率应降低
  • 一种可能做法:每次换存储区,容量加倍

一次高开销操作后,保证有很多次低开销操作,称为分期付款式的常量复杂性

python中list采用上述设计,因此lst.insert(len(lst), x)比一般位置加入的效率高.等价写法lst.append(x),若合适就应优先使用。

原文地址:https://www.cnblogs.com/Bella2017/p/8094667.html