重要数据结构——list,tuple,set,dict
admin
2023-07-21 03:02:26
0次

基本特性和创建对比:

列表:

可变的,可重复的,有序的 ,线性的
列表个体称为元素,元素可以是任一对象
一定均匀分配每个元素的内存存储空间,因为它靠偏移量来搜索元素,列表中存放的都是数据的内存地址,而不是数据,真正的数据存放在其他地方。
  • 列表创建:
    lst= list()
    lst = []
    lst =list(iterable) >>> lst = list(range(5))
    lst = [2, 6, 9, 'ab']

元组:
不可变,可重复的,有序的,只读的(没有增删改查)
元组个体称为元素,元素可以是任一对象
对于不需要修改的序列,我们最好将其定义为元组。(因为元组的结构相比列表更简单,所以它比列表更加节省内存空间)

  • 元组创建:
    t = () , t=tuple():创建一个空的元组
    t = tuple(range(1,7,2)) :可迭代对象iteratable
    t = (1,) :创建一个元素的元组注意要有个逗号
    t = (1,2,3) 6 , t =(2,3,4)+(4,5,6,7) , t = t3:元组是不可修改的,但是这里的乘号和加号表示生成一个新的元组

集合(set):

可变的,无序的,不可重复的
有序才是线性的,无序不是线性的。set集合的元素是不可以索引的,因为set是无序的。但是set是可以迭代,这就是为什么可索引的一定是可迭代的,但是可迭代的不一定是可索引的。
set的元素必须可以hash的。
只要是不可变类型的数据结构都是可hash的(hashable),具体如下:
数值型int、float、complex
布尔型True、False
字符串string、bytes
tuple
None:空值也是可以hash的,因为它是一个常量,不可变。
为什么说可变类型的数据结构不可hash呢?因为只要数据一变,hash后的key也会跟着变。这对以hash值为索引依据的set集合而言是不可接受的,需要频繁的维护hash表。得不偿失。

  • set创建:
    s=set():创建一个空的集合(注意:s = {}是创建字典)
    s = set{range(1,7,2)} :可迭代对象iteratable
    s= {(2,3),23,"w",[23,4]} :错的!! list不可hash。

字典:

可变的,无序的,key值不重复
字典是key:value键值对的数据集合
创建字典的时候一定要注意,key一定要是可hash的数据结构,否者会抛出TypeError的异常。

  • 字典创建:
    d = dict() 或者d = {} :创建一个空字典 (d=dict(er =34) 对的 d={er=34}错的)
    dict(iterable, **kwarg):使用可迭代对象和name,value对构造字典,不过可迭代对象的每一个元素都必须是一个二元结构
    d = {'a':10, 'b':20, 'c':None, 'd':[1,2,3]}:直接穷举法

字典元素的访问:
d[key]:返回key对应的值value,key如果不存在则抛出KeyError异常
get(key[, default]):返回key对应的值value,但是如果key不存在则返回缺省值,如果没有设置缺省值就返回None
setdefault(key[, default]):如果key存在,返回key对应的值value。如果key不存在,则添加key:value对,value为default,并返回default,如果default没有设置,缺省为None,一定要注意setdefault不能够修改key的value,当key存在时,它只是返回key的value,并不会修改key的值。


增删改查对比:
list:

  • 增加和修改:
    append(object) :在列表尾部追加元素,它是就地修改列表。append的时间复杂度是O(1),因为它是在列表的尾部追加元素的,新追加的元素不会影响旧元素的内存地址,因此它是高效的。
    列表推导式:[i for i in range(10)]。
    [1]10:运算符重载。
    insert(index, object)
    :在指定索引index处插入元素object,它也是就地修改列表,因此返回值也是None,这也就意味着没有新的列表产生。它的时间复杂度是O(n),因为在列表中间插入新的元素,那么该元素后面的老元素将会全部会被往后挪动一个地址空间,所以它的效率是低下的,也应该尽量少用,否者影响代码效率。
    extend(iteratable) :就地修改,将可迭代对象的元素追加进来,返回None,时间复杂度同样是O(n)
    (+) :连接操作,将两个列表连接起来,产生一个新的列表,原列表不变。加号两边的数据类型一定要一致,否者就会抛出TypeError异常。+号非常的占用内存空间。因此每使用一次加号,就相当于生成了一个新的对象,并且在内存中新开辟一段地址空间用于保存该对象。一旦加号使用量大了,那么这个过程就会反复重现,快速消耗内存。

    (x):重复操作,称为”运算符重载“,将列表中的每个元素重复n次,产生一个新的列表,原列表不变。注意:如果列表中的元素是“复杂类型(引用类型)”,即其他的数据结构类型,那么重复的只是内存地址,而不是真正的数据,并且重复的多个内存地址都是指向同一个数据。如果列表的元素是“单值(数字、字符串)”,则重复的就是数据本身,而不是内存地址。**

  • 删除::
    remove(value) :就地修改,。从左至右查找第一个匹配value的值,移除该元素,和count、index一样,remove的时间复杂度也是O(n)的,原理一样,因为它同样需要遍历列表,从列表中先找到value,之后才能够remove。

    pop([index]) :不指定索引index时,就从列表尾部弹出一个元素,并将该元素返回给调用者。

    clear() :清空列表的所有元素,剩下一个空列表。,能不用clear就不用,尽量少用。

set:

  • 增加:
    add(elem):就地修改,增加一个元素到set中,如果增加的元素已经在集合中存在,则什么都不做。
    update(*others):就地修改,将一个可迭代的序列合并到set集合中来,参数others必须是可迭代对象
  • 删除:
    remove(elem):就地修改,从set中移除一个元素,若元素不存在,会抛出KeyError异常。
    discard(elem):就地修改,从set中移除一个元素,与remove不同的是,如果元素不存在则什么都不做。没有返回值(即返回值为None)
    pop():就地修改,随机移除集合中的某个元素,并返回该移除的元素。注意pop函数不能够接收参数,否者报语法错误。如果是空集合,则返回KeyError异常
    clear():就地修改,移除集合中的所有元素。
  • 修改和查询
  • set集合不提供元素修改方法:
    set集合中是不提供元素修改的方法的,对于一个集合,要么删除,要么加入新的元素,没必要修改元素。(因为集合元素是不重复的)
    set集合也不提供元素查询方法:
    因为set集合是非线性的数据结构,无法索引(计算机内部还是通过hash key线性索引的,只不过对人来说是无序的。)但是可以使用for循环遍历迭代显示所有元素。因为set集合也是可迭代对象。

dict:

  • 增加和修改:
    d[key] = value:就地修改,如果key存在,则将key对应的值修改为value,如果key不存在则添加新的key:value对。
    update([other]):就地修改,使用另一个字典的key:value对来更新本字典,如果key不存在,就添加,key存在,则覆盖已经存在的key对应的值。

  • 删除:
    pop(key[, default]):如果key存在,移除它,并返回它的value,key不存在,返回指定的default值,若default未设置,并且key不存在,则抛出KeyError异常
    popitem():随机移除并返回一个键值对,当字典为empty时,抛出KeyError异常
    clear():清空字典。
    del语句:del是语句,而不是函数,因此使用del删除变量名时,一定要注意不要使用括号del()。del语句的作用就是用来删除变量名的,它并没有真正的删除数据,它的作用实际上就是在内存中减少一个数据的引用计数,python不提供给用户直接删除垃圾的方法,而是由GC删除垃圾。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...