1.dictPython内置字典:dict的支持,dict的全称是dictionary,其他语言也叫map,使用key-value(key-value)存储,搜索速度极快。例子:假设你想根据同学的名字查找对应的年级。如果使用列表来实现,需要两个列表:names=['Michael','Bob','Tracy']scores=[95,75,85]来定义一个name,要找到对应的score,必须先在names中找到对应的位置,然后从scores中取对应的score,list越长,耗时越长。如果用dict实现,只需要一个“姓名”-“分数”对照表,直接根据姓名查找分数即可。不管表有多大,查找速度都不会减慢。示例:names=['Michael','Bob','Tracy']scores=[95,75,85]1。为什么dict的搜索速度这么快?dict是在词典的索引表(如偏旁部首表)中查找该词对应的页码,然后直接翻页查找该词。不管你在找哪个词,这种查找都非常快,不会随着词典的增加而变慢。将数据放入dict的方法,除了在初始化时指定外,还可以通过key放入:d['Adam']=67print(d['Adam'])由于一个key只能对应一个value,所以,多次Putavalueintoakey,后面的value会flushoutpreviousvalue:d['Jack']=90d['Jack']=88print(d['Jack'])#Putavalueinto多次一个键,后面的值会刷掉前面的值:显示后面修改的值。如果key不存在,dict会报错:print(d['Thomas'])2.有两种方法可以避免key不存在的错误。2.1.是通过inprint('Thomas'ind)2.2判断key是否存在。就是dict提供的get方法。如果key不存在,可以返回None,或者value.get('Thomas')print(d自己指定).get('Thomas',-1))注:Python的交互式命令行不显示返回None时的结果。删除一个key,使用pop(key)方法,对应的value也会从dict中删除:d.pop('Bob')print(d)3.dict与list相比有以下特点:并且插入速度极快,不会随着按键的增加而增加;它需要占用大量内存并浪费大量内存。而列表恰恰相反:查找和插入的时间随着元素的增加而增加;它占用空间小,浪费内存少。所以,dict是一种用空间换取时间的方式。2、setset类似于dict,也是key的集合,但不存储value。由于密钥不能重复,所以集合中没有重复的密钥。要创建集合,需要提供一个列表作为输入集合:s=set([1,2,3])print(s)传入的参数[1,2,3]是一个列表,而displayed{1,2,3}只是告诉集合内部有3个元素1,2,3,显示的顺序并不代表集合是有序的。.set中自动过滤重复元素:s=set([1,1,2,2,3,3])print(s)个元素可以通过add(key)方法添加到set中,可以添加重复,但不会生效:s.add(4)s{1,2,3,4}可以通过remove(key)方法删除元素:s.remove(2)print(s)set可以看作由于在数学意义上是无序的,是没有重复元素的集合,因此,两个集合可以进行数学意义上的交集和并集等操作:s1=set([1,2,3])s2=set([2,3,4])print(s1&s2)print(s1|s2)set和dict的区别是没有存储对应的值,但是set的原理和dict是一样的,所以同样不能放变量对象,因为无法判断两个变量对象是否相等,也无法保证集合内部“不会有重复元素”。尝试将列表放入集合中,看看是否会报错。三、不可变对象str是不可变对象,list是可变对象。对于可变对象,比如列表,当操作列表时,列表内部的内容会发生变化。示例:a=['c','b','a']a.sort()#a['a','b','c']print(a)对于不可变对象,例如str,如何对str进行操作:a='abc'b=a.replace('a','A')print(b)print(a)对象本身的内容没有改变。相反,这些方法创建新对象并返回它们,从而确保不可变对象本身始终是不可变的。4.小结本文以Python为基础,介绍了dict和set的使用方法。使用键值存储结构的字典在Python中非常有用。选择不可变对象作为键非常重要。最常用的键是字符串。通过逐模块讲解、案例分析、实际案例中需要注意的地方、遇到的难点,给出详细的讲解方案。使用JavaScript语言,读者可以更好地理解它,希望能帮助大家更好地学习。本文转载自微信公众号《Go语言进阶学习》,可通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。
