[Python]dict和set两种数据结构
【Dict】
Python内置了字典(dict,全称dictionary) 的数据结构,使用键值(Key-Value)存储,特点是查找速度快,但占用内存多于list数据结构。
当我们要存储两个相关联的列表数据时,就需要两个list 。
如:
name = ['Mike','Adam','Jack']
scores = ['88','79','91']
可当我们利用dict时,就只需一个。
- 如何定义
d = {'Mike': 88,'Adam': 79, 'Jack': 91}
//变量名 ={'Key值1':Value值1,'Key值2':Value值2}
- dict速度快的原因
当我们要从字典中查找一个字时,首先回去查找部首,或者拼音开头,因为这样比一页页翻的效率要高。
dict就是利用了这种原理,也就是Key-Value 键值存储,dict中的Key等价于汉语字典中的部首,而Value就是我们需要查找的那个字。 dict的相关语句
除了初始化之外,Value的值也可以通过Key来放入,也就是给Key赋值,一个Key,只能有一个Value值,多次赋值将会取最近一次的值。>>>d['Jack']=67 >>>d['Jack'] 67
如果给不存在的Key赋值,则会出现错误。
要避免这种错误的,可用get来查找key,如果不存在,则返回None,或者自己给定的值>>> d.get('Amy') //返回None,不显示 >>> d.get('Amy', -1) -1
除此之外,还有一种in的方法可查到是否存在Key
>>>'Jack' in d //Key值 in 变量名 true //存在则为true,否则False
当我们要删除一个Key时,需要用到pop(key)的方法, value同时也会被删除
>>>d.pop('Jack')
91
>>>d
{'Mike': 88,'Adam': 79} //Key值‘Jack’已被删除
【Set】
set和dict类似,区别就是定义的方法不同和set无value值,
简而言之set就是一组没有value值的dict
- 如何定义
>>>s = set(['Mike','Adam', 'Jack'])
//变量名 = set (['Key值1','Key值2','Key值3'])
- 相关语句
>>>s.add('Rooney') // set的增加语句
>>>s
{'Mike','Adam', 'Jack','Rooney'}
>>>s.remove('Rooney')
>>>s
{'Mike','Adam', 'Jack'}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
set除了没有value,其他都和dict相同, 它们都无法存储 不可变量
不可变量的解释
在python 中,str为不可变量,list为可变量
由字面含义可知,对list进行操作,list是会改变的
如:
>>> a = ['c', 'b', 'a']
>>> a.sort() //对 list变量 a进行排序
>>> a
['a', 'b', 'c']
可以看到,在这里, list 变量 a ,由 [‘c’, ‘b’, ‘a’]变为了[‘a’, ‘b’, ‘c’] ,发生了顺序变化
而如果对 str变量进行操作呢
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a //在上面str变量a已经被replace操作改变,可下面的a的值仍然是'abc'
'abc'
改进代码:
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
其实a是一个变量,指向字符”abc”所在的内存, 改变str变量a 等于新创建了一个内存存储了字符”Abc”,原来的字符并未改变,a的指向也没有改变, 但是这时候将b 指向新内存”Abc”,一切就变得明确了