# dict 字典/map:使用键值对key-value存储,具有极快的查找速度 # 对比list的做法:给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。 # names = ['Alice','Bob','Tank'] # scores = [95, 75, 85] # dict实现 d = {'Alice':95,'Bob':75,'Tank':85} print(d['Alice']) d['Adam'] = 67 print(d) # 一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉: d['Jack'] = 90 print(d) d['Jack'] = 88 print(d) # 如果key不再就会报错 # print(d['Shirley']) # 通过in判断key是否存在 print('Shirley' in d) # get()方法,如果key不在,可以返回None,或者自己指定的value print(d.get('Shirley')) print(d.get('Lin', False)) print(d.get('Lin', -1)) # pop(key) 删除一个key,对应的value从dict中删除 d.pop('Jack') print(d) # 请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。 # dict是用空间来换取时间的一种方法。 #和list比较,dict有以下几个特点: # 查找和插入的速度极快,不会随着key的增加而变慢; # 需要占用大量的内存,内存浪费多。 # 而list相反: # 查找和插入的时间随着元素的增加而增加; # 占用空间小,浪费内存很少。 # dict的key必须是不可变对象。 # 这个通过key计算位置的算法称为哈希算法(Hash)。要保证hash的正确性,作为key的对象就不能变 # list是可变的,就不能作为key # set 也是一组key的集合,但不会存储value。由于key不能重复,所以,在set中,没有重复的key。 s = set([1,1,2,2,3,3]) print(s) # 显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。 # add(key) 在set中加入元素 s.add(4) print(s) s.add(4) print(s) # remove(key) 删除元素 s.remove(4) print(s) # set可以看成数学意义上的无序和无重复元素的集合 # 两个set可以做数学意义上的交集、并集等操作 s1 = set([1,2,3]) s2 = set([2,3,4]) intersection = s1 & s2 print(intersection) union = s1 | s2 print(union) #set和dict的唯一区别仅在于没有存储对应的value,但是set的原理和dict一样,所以同样不可以放入可变对象 # 因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。 # 再议不可变对象 a = 'abc' print(a.replace('a','A')) print(a) a = 'abc' b = a.replace('a','A') print(b) print(a) # str虽然有replace操作,但str是不可变对象,而a、b是变量