高中生零基础学python(三)
学习python的第三天
我又来了,今天好累,但还是得坚持学习嘛,废话不多说,Let’s get started!
今天我们要学习的是set和dict,他们都是一组key的集合, 但他们有什么区别呢,接下来的学习会告诉我们!
首先我们来看dict
如果只是几个人,我完全可以用list来完成这个任务
但全校的人数过于庞大,用list的话,list越长,耗时越长,查找起来速度较慢。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
为什么dict可以这么快?就拿查字典来举例,list就是不按拼音部首直接一个字一个字的去找,而dict是按照拼音部首对应的页码精准查询!
dict使用键-值(key-value)存储,具有极快的查找速度。
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
假设名单里没有这位同学的名字,我们用dict去查询会出现什么状况呢?
为了避免这种错误,有两种解决办法:
一是通过in判断key是否存在
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
如果我们不小心错误的添加了一个同学的信息,由于数量较大,不方便查找,怎么办呢?
我们可以用pop(key)来删除这个同学和他所对应的value
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的
和list比较,dict有以下几个特点:
1.查找和插入的速度极快,不会随着key的增加而变慢;
2.需要占用大量的内存,内存浪费多。
而list相反
1.查找和插入的时间随着元素的增加而增加;
2.查找和插入的时间随着元素的增加而增加;
记住一点,dict的key必须是不可变对象,因为dict是根据key来计算value的位置,如果key的值会变,就会导致每次计算的value都不同,这样dict的内部就混乱了。
set
这里,[1,2,3]是一个list,而{1,2,3}是表示set内部的有1,2,3这三个元素。
我们可以通过add(key)来添加set中的元素,
是不是发现了什么?我们重复添加了一个4,但并没有显示出来,原因是set会自动过滤掉重复的元素。
通过remove(key)可以删除元素:
看到这里,我们应该清楚了,dict和set的唯一区别就是有没有存储对应的value。
但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”
说了这么多,到底什么是不可变对象呢?
可变对象,比如list
对于不可变对象,比如str
这到底是怎么回事?
让我们用b指向'Abc'看看会怎么样
原来如此,当我们用replace()的时候,replace实际上是作用在字符串’abc‘上,虽然replace的意思是替换,但相反,replace创建了一个新的字符串’Abc‘,当我们用b来指向这个字符串的时候,就容易理解了!

今天的学习就到这里,大家再见!
我又来了,今天好累,但还是得坚持学习嘛,废话不多说,Let’s get started!
今天我们要学习的是set和dict,他们都是一组key的集合, 但他们有什么区别呢,接下来的学习会告诉我们!
首先我们来看dict
如果只是几个人,我完全可以用list来完成这个任务
names = ['Mike', 'Bob', 'Alice']
scores = [95, 80, 85]但全校的人数过于庞大,用list的话,list越长,耗时越长,查找起来速度较慢。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
>>>d = {'Mike': 95, 'Bob': 80, 'Alice': 85}
>>>d['Mike']
95为什么dict可以这么快?就拿查字典来举例,list就是不按拼音部首直接一个字一个字的去找,而dict是按照拼音部首对应的页码精准查询!
dict使用键-值(key-value)存储,具有极快的查找速度。
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>>d['Mike'] = 90
>>>d['Mike']
90
>>>d['Jack'] = 90
>>>d['Jack']
90
>>>d['Jack'] = 88
>>>d['Jack']
88 假设名单里没有这位同学的名字,我们用dict去查询会出现什么状况呢?
>>>d['小明']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: '小明'为了避免这种错误,有两种解决办法:
一是通过in判断key是否存在
>>>'小明' in d
False二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>>d.get('小明')
>>>d.get('小明', -1)
-1如果我们不小心错误的添加了一个同学的信息,由于数量较大,不方便查找,怎么办呢?
我们可以用pop(key)来删除这个同学和他所对应的value
>>>d.pop('Bob‘)
80
>>>d
{'Mike': 95, 'Alice': 85}请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的
和list比较,dict有以下几个特点:
1.查找和插入的速度极快,不会随着key的增加而变慢;
2.需要占用大量的内存,内存浪费多。
而list相反
1.查找和插入的时间随着元素的增加而增加;
2.查找和插入的时间随着元素的增加而增加;
记住一点,dict的key必须是不可变对象,因为dict是根据key来计算value的位置,如果key的值会变,就会导致每次计算的value都不同,这样dict的内部就混乱了。
set
>>>s = set([1, 2, 3])
>>>s
{1, 2, 3}这里,[1,2,3]是一个list,而{1,2,3}是表示set内部的有1,2,3这三个元素。
我们可以通过add(key)来添加set中的元素,
>>>s.add(4)
>>>s
{1, 2, 3, 4}
>>>s.add(4)
>>>s
{1, 2, 3, 4}是不是发现了什么?我们重复添加了一个4,但并没有显示出来,原因是set会自动过滤掉重复的元素。
通过remove(key)可以删除元素:
>>>s.remove(4)
>>>s
{1, 2, 3}>>>s1 = set([1, 2, 3])
>>>s2 = set([2, 3, 4])
>>>s1 & s2
{2, 3}
>>>s1 | s2
{1, 2, 3, 4}看到这里,我们应该清楚了,dict和set的唯一区别就是有没有存储对应的value。
但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”
说了这么多,到底什么是不可变对象呢?
可变对象,比如list
>>>a = ['c','b','a']
>>>a.srot()
>>>a
['a','b','c']对于不可变对象,比如str
>>>a = 'abc'
>>>a.replace('a','A')#我们将a替换成A
'ABC'
>>>a
'abc'#what?居然没变?这到底是怎么回事?
让我们用b指向'Abc'看看会怎么样
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'原来如此,当我们用replace()的时候,replace实际上是作用在字符串’abc‘上,虽然replace的意思是替换,但相反,replace创建了一个新的字符串’Abc‘,当我们用b来指向这个字符串的时候,就容易理解了!

今天的学习就到这里,大家再见!
...全文
相关推荐
小甲鱼零基础学python全套课后题及答案
小甲鱼零基础学python全套课后题及答案,96集全部答案。
小甲鱼零基础学python课后习题+答案
小甲鱼零基础学python课后习题+答案,鱼C论坛的题目大部分都有!
鱼c小甲鱼零基础学python全套课后题
鱼c小甲鱼零基础学python全套课后题
鱼c小甲鱼零基础学python 零基础入门学习Python全套96集课后习题及答案 共232页.pdf
鱼c小甲鱼零基础学python 零基础入门学习Python全套96集课后习题及答案 共232页.pdf
鱼c小甲鱼零基础学python全套课后题及答案_零基础学python_python_
鱼c小甲鱼零基础学python全套课后题及答案


