zoukankan      html  css  js  c++  java
  • python的list和tuple

    python的list和tuple采用了顺序表的实现技术。

    tupel是不变的表,因此不支持任何该表其内部状态的操作。在其他方面,他与list的性质相似。因此下面将集中关注list的情况。

    list的基本实现技术

    python的便准类型list就是一种元素个数可变的线性表,可以加入和删除元素,在各种操作中维持已有元素的顺序。其重要的实现约束还有:

    • 基于下标的高效元素访问和更新,时间复杂度为O(1)
    • 允许任意加入元素,而且在不断加入元素过程中,表对象的标识(id)不变
    • 由于要求元素访问O(1),并能维持元素的顺序,这就要求表只能采取连续表技术,表中元素保存在连续的内存里
    • 要求能容纳任意多的元素,就必须能更换元素存储区。要想在更换元素存储区时list对象的标识唯一不变,只能采取分离式实现技术

    在python的官方实现中,list就是一种采用分离式技术实现的动态顺序表。

    python的采用了元素存储区调整策略,如果需要反复加入元素,用lst.insert(len(lst), x)比在一般位置插入的效率高。python提供了另一等价的lst.append(x)方法。

    在python的官方系统中,list采用了如下的实际策略:

    • 在建立空表(或很小的表)时,系统分配一块能容纳8个元素的存储区
    • 在执行插入操作(insert或append等)时,如果元素区满,就换一块4倍大的存储区。如果当时的表已经很大,系统会改变策略,换存储区时容量只会加倍
    • 很大,目前的值为50000。是为避免造成空间浪费

    通过这套技术实现的list,尾端加入元素的平均时间复杂度为O(1).

    list的主要操作性质

    • len(.)是0(1)的操作,因为表中必须记录元素个数,自然可以简单的取用
    • 元素的访问和赋值,尾端的加入和尾端的删除(包括尾端切片删除)均是O(1)操作
    • 一般位置的元素加入、切片替换、切片删除、表拼接(extend)等都是O(n)操作
    • pop操作默认删除表尾的元素并将其返回,时间复杂度O(1)。一般情况的pop操作(非表尾)为O(n)的时间复杂度
  • 相关阅读:
    WinCC的电子签名与审计追踪 2.0
    如何在VB脚本中Ping IP
    如何在WinCC中管理Windows账户
    配置SQL Server维护计划-定时备份
    修改SQL Server中的计算机名
    WinCC的画面使用技巧
    用VB脚本复制文件夹并跳过重复文件
    如何在WinCC的VB脚本内实现延时功能
    用vbs和ADSI管理Windows账户
    oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法
  • 原文地址:https://www.cnblogs.com/lianhaifeng/p/13512876.html
Copyright © 2011-2022 走看看