2020.6.7 List(列表) Tuple(元组) Dict(字典) Set(集合)
先从4者异同点说起。
相同点:都是一组多个数据
不同点:
1、写法不同
List:中括号[ ]包括的一组元素,如L=[1,2,3,4]
Tuple:小括号( )包括的一组元素,如T=(1,2,3,4)
Dict:大括号{ }包括的一组Key:Value元素,如D={'Mike':1,'Tom':2}
Set:用set方法初始化的一组List元素,相当于set( List ),如S=set([1,2,3,4]),显示的时候也是用大括号{ }
2、数据保存规则不同
List:元素可以是任何类型,也可以是List类型(访问方式同C语言中的二维数组,如L[2][0]),元素值可以修改
L=[1,'2',[3,4]]
Tuple:元素可以是任何类型,只是元素值在初始化后便无法修改(Tuple中的List元素中的值可以修改)
T=(1,'2',[3,4])
空元组写为T=()
只有一个元素的元组,要在元素后加逗号','以和数学中的括号相区分,如T=(1,)
Dict:元素只能是Key-Value类型,写法为Key:Value,其中Key必须为不可变的类型,如字符串str,整数int,所以不能为List类型
D={'Mike':1,'Tom':2,'Jim':3}
Set:元素值不允许有重复,初始化时会自动过滤掉重复的元素,元素值同样是不可变的类型,不能为List
S=set([1,1,4,3,2])
S
{1, 2, 3, 4}
3、数据操作规则不同
①访问
List与Tuple可以直接通过下标访问,下标0,1意义同C语言数组,下标也可以为-1,-2,……。-1表最后一个元素,-2表倒数第二个元素
L=[1,'2',[3,4]] T=(1,'2',[3,4]) L[1] '2' T[2] [3, 4]
T[-1]
[9, 4]
Dict可以通过[Key]方式访问;如果Key不存在,会出现KeyError
D={'Michel':1,'Tom':2,'Jim':3} D['Jim'] 3
D['Tim'] Traceback (most recent call last): File "<input>", line 1, in <module> KeyError: 'Tim'
如果想要访问一个不存在的Key时,不抛出KeyError,而是返回一个默认值。可以用collections模块下的defaultdict类
from collections import defaultdict dd=defaultdict(lambda:'N/A') dd['Key1']=1 dd['Key1'] 1 dd['Key2'] 'N/A'
普通的Dict,存储时Key是无序的,如果想要Key保持创建时的次序,可以用collections模块下的OrderedDict类
Set则不允许直接通过[下标]方式访问其中元素
②修改已有元素
List可以直接通过下标修改
L[1]=2
L
[1, 2, [3, 4]]
Tuple不允许修改元素,除非是其中的List元素的元素
T[2][0]=9 T (1, '2', [9, 4])
Dict可以直接通过[Key]方式修改
D['Jim']=4 D {'Michel': 1, 'Tom': 2, 'Jim': 4}
③添加新元素
List:两种;a、末尾添加,append方法;b、下标 i 处添加,insert方法,原下标 i 处元素后移一位
a、append(Ele)
L.append(7.6)
L
[1, 2, [3, 4], 7.6]
b、insert(i,Ele)
L.insert(1,'2.5') L [1, '2.5', 2, [3, 4], 7.6]
Tuple:不允许添加,除非是给其中的List元素添加,方法同List
T[2].append(7.6) T (1, '2', [9, 4, 7.6])
Dict:直接通过D[Key]=Value的方式添加
D['Leo']=5 D {'Michel': 1, 'Tom': 2, 'Jim': 4, 'Leo': 5}
Set:add方法
S.add(5)
S
{1, 2, 3, 4, 5}
④删除已有元素
List:pop方法,返回值为删除的元素
a、删除末尾元素,直接pop(),没有参数
b、删除下标 i 处元素,pop( i )
L [1, '2.5', [3, 4], 7.6] L.pop() 7.6 L [1, '2.5', 2, [3, 4]] L.pop(1) '2.5' L [1, 2, [3, 4]]
Tuple:只能删除Tuple中的List元素中的元素,方法同上
Dict:pop(Key),返回值为删除的Key对应的Value
D {'Michel': 1, 'Tom': 2, 'Jim': 4, 'Leo': 5} D.pop('Leo') 5
Set:remove(Key),没有返回值
S.remove(3)
S
{1, 2, 4, 5}
其他特性:
1、Dict通过Key找Value的算法是Hash算法,不是顺序读取,速度比列表List要快;由于速度快,所以占用空间比List大
2、Key必须是不可变类型,List是可变类型,而Tuple是不可变类型,所以Key可以是Tuple类型
3、最常用的Key类型是字符串str
一些方法:
Dict:
检查Key是否存在的方法:
1、in
格式:Key in D
返回布尔值,存在为True,否则为False
'K'in D False
2、Dict的get方法,不存在时返回None或者自己指定的参数,存在时返回一个值(具体哪个值并不确定,我用了两个编译器测试了两次分别是1和2)
print(D.get('T')) None print(D.get('T',0))#自己指定不存在时的返回值 0 print(D.get('Tom',0)) #存在 2
3、keys()
列出所有的key
d.keys() dict_keys(['a', 'b', 'c']) list(d.keys()) ['a','b','c']
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性