Python-Task6 字典和集合
学习内容
廖雪峰老师python教程https://www.liaoxuefeng.com/wiki/1016959663602400
字典
python内置字典dict(c++中叫map),使用键-值(key-value)存储,有极快的查找速度。
>>> d={'mike':95,'bob':75,'tracy':85}#这就是一个字典
>>> d
{'mike': 95, 'bob': 75, 'tracy': 85}
>>> d['mike']
95
之所以说dict的速度如此之快,是因为他的查找策略如同查字典一般,内部就是数据结构中的哈希算法。
首先key-value这种存储方式在放进去的时候,会根据key值算出value的存放位置,这样取出的时候才能根据key直接去找到value。
比如上面那个例子,在dict的内部可以直接计算出‘mike’的内存地址,所以直接取出,特别快。
可以通过d['adam']=99
的方式将数据放入字典,要注意,一个key和value是一对一的。
避免key值不存在的错误,有两种方法:
1.通过in 判断
>>> 'jac'in d
False
2.通过get()方法
>>> d.get('jac') #找不到返回None
>>> d.get('jac',-1) #可以指定错误返回值
-1
使用pop(key)来删除
字典的内部存放顺序与key放入顺序无关
list | 占空间小,浪费少,查找时间与元素个数成正比 |
---|---|
dict | 以空间换时间 |
牢记的第一条就是dict的key必须是不可变对象。所以key可以使字符串、整数等不可变量,但list可变不可作为key
集合
set是一组,key的集合,不过没有value,在set中没有重复的key。
另一种理解理解方式是,set是无序和无重复元素的集合(数学意义),并且还可以做交并运算。
>>> s=set([1,2,3,2])
>>> s
{1, 2, 3}
创建set需要先使用list作为输入,重复元素会被过滤掉
使用add(key),进行用于添加元素
使用remove(key),用于删除元素
注意一点:在这里集合和list列表是不同的,显示的顺序也不表示set是有序的。
>>> s #set的交并运算
{1, 2, 3}
>>> q
{8, 3, 5, 7}
>>> q & s
{3}
>>> q | s
{1, 2, 3, 5, 7, 8}
set和value的唯一区别仅在于没有存储对应的value,set原理和dict一样
重新认识变量
a=‘abc’ 其中a本身是一个变量,‘abc’才是字符串的对象!
replace(‘A’,‘a’)实际上是返回的新的一个字符串。原字符串不变。
所以现在可以总结可变和不可变?
1.可变对象:对对象进行操作,内部的内容是会变化的,比如list
2.不可可变对象:内部内容不会发生变化,比如str