手把手教你学python3第五讲


如果图片加载不出来请到https://www.bilibili.com/read/cv243286,都是我写的

上一篇文章后面有大佬提给了两条建议,我们赶快来看看吧。

str有很多内置函数,笔者没有介绍完。我们来看看这个join,括号里面是被分隔对象,前面是分隔符

用上面这种就很容易把列表转换为字符串了,元组,字符串,字典都可以用

元组必须加小括号不然会报错,python会认为逗号是分隔了两个参数。这里再讲一下分片吧,a[::-1]第一个冒号是表示全部元素,第二个冒号加上数字表示步长:-1就是从右向左,用负步长需要注意第一个冒号前后的数字大小


第一个冒号前没有填的是表示到边界,上图第一个冒号右边没有那就一直到左边界,也就是索引是0的元素(python索引开始值是可以自己设的,默认是0),并且包括这个元素。还需要注意第一个冒号后面的数是不包括进去的,对比一下上面两个图。如果是正步长

第一个冒号后面没有数字就一直到最大索引值的元素,也包含这个元素。

字典也是可以用join来连接,连接的是key,下面会说什么是字典和key

在这里再介绍一个bif内置函数split

可以看到split括号里是分隔的字符,这个内置函数返回的是一个列表,可以用join转为字符串。需要提醒的是,字符串的bif操作是不会改变原字符串的,它产生一个新的字符串,如果没有标签给这个新字符串,它很快会被python回收

上面操作都没与改变a

关于尾递归


都摘自百度百科,这都是理论,下面我们举例感受,我们还是拿以前算阶乘为例

普通递归

我们来看他的内存占用情况:

a(5)

5*a(4)

5*4*a(3)

5*4*3*a(2)

5*4*3*2*a(1)

5*4*3*2*1

5*4*3*2

5*4*6

5*4

20

过程就是这样:要知道a(5)就得知道a(4),并且这个5还要存起来,要想知道a(4)就得知道a(3),并且5和4都要存起来,依此类推,最后直到返回条件a(1)=1,然后可以计算a(2)=2*a(1),再计算a(3)=3*a(2)...最后得到答案。

尾递归

尾递归需要两个参数,n我理解为还需要递归的次数,当n==0时,也就是不需要在递归时,返回结果,否则,继续递归,result是我们要的结果,一般会设置默认参数,这里是算阶乘所以默认是1,默认值视情况而定。我们来看内存占用

a(5,1)

a(4,5)

a(3,20)

a(2,60)

a(1,120)

120

迭代

如何写一个尾递归?理论上只需要return后面是一个纯函数比如a(n-1,n*result),而不是n*a(n-1),后一种无法更新a函数里的实际参数,只是新建了一个栈,因为n和a(n-1)都需要存。尾递归和迭代内存占用都不多,但是函数调用压栈弹栈是需要时间的,所以我认为至少再计算阶乘这个问题上尾递归还是比迭代要慢。斐波那契数列我认为也不是一个尾递归,以求a(4)为例,内存占用:

a(4)

a(3)+a(2)

a(2)+a(1)+1

1+1+1

2+1

3

斐波那契和汉诺塔笔者想不出来怎么写尾递归,如果有高人,请在评论区指教,尾递归笔者参考了https://www.zhihu.com/question/20761771,有兴趣的可以去看下,笔者基本都说到了。笔者还要说一下,关于数据存储结构的问题,笔者还没有开始学习,解答不了,以后有机会可能学了数据结构还会来看以前发过的文章,在下面加评论。


这一讲开始我们学习字典,字典是一种映射类型,字典不是一种序列,字典的关键字我们叫做key,值叫做value,字典也可以叫做哈希表或者关系数组。比如你去查one的意思,one就是key,1就是value。字典用大括号括起来,字典调用要输入key而不是索引,它不是序列没有索引,我们来实践一下


in函数只能访问key(如果不用bif的话),key不能是一个列表。元组和字符串都可以当一个key


字典也不可以是一个key。

字典就是一种对应关系那么其实下面通过索引映射也是可行的,但是麻烦

但是效率不高,也多少有些别扭。我们也可以用zip打包它们或者用前面学过的map()

创建字典还有以下方法

我们可以看到对应关系可以用元组,也可以用列表,也就是里面第一层括号,逗号前面是key后面是value,所有对应关系可以放在一个列表或者元组中,也就是从里向外第二层括号,因为dict只能有一个参数,第三层括号是dict这个工厂函数的,int,str,float,list,tuple都是工厂函数,它们产生特定类型。

还可以使用关键字,但是关键字只能是字符串的内容,比如

但是关键字这种做法key不可以是元组,只能先把元组转化为字符串再提取内容,

那么可不可以有key对应多个value呢?

python报错了,是不可以的。

字典和列表不同的是,如果你给一个字典里不存在的key赋值,它不会报错,会加上这个key进去,但是相同的是,如果你直接访问一个不存在的key,它会报错


这里还要说的是,大括号也不一定是字典,以前我们就见过大括号一次

a没有映射关系,只有key,我们看到他的类型是集合。

下面介绍一些dict的内置方法,你可以通过help(dict)来查看

第一个fromkeys

返回的是一个新的字典,有两个参数,第一个参数是key,第二个是value,第二个可以没有,默认是None。

注意只能有两个参数

而且注意它生成的是新的字典,不会影响原来的字典,所以修改字典中的key对应的value是不能用它的

下面是keys,values和items


举几个例子

get也是一种访问字典的方法


可以看到和普通的访问不同,如果这个key在字典里不存在,get不会报错,默认会返回None,当然返回内容可以自己设置。如果单纯只是想知道这个key在不在字典里,可以直接用in和not in

下面介绍和列表一样的clear

​这里的道理笔者再列表那里就讲过了,python里的变量就是个标签。上图中的a.clear用了bif改变的是a这个标签对应的字典的内容,而a={}只是把a这个标签从原来的字典上撕下来,贴到空字典上而已。

今天由于笔者有事就只能先写到这里了,先给大家说声抱歉,笔者外公过世了。


笔者再给出这个系列第二三讲的链接。

第二讲:http://blog.csdn.net/qq_41740705/article/details/79340828

第三讲:http://blog.csdn.net/qq_41740705/article/details/79342158

这两讲up不准备搬了,请自行查看

上一篇文章后面有大佬提给了两条建议,我们赶快来看看吧。

str有很多内置函数,笔者没有介绍完。我们来看看这个join,括号里面是被分隔对象,前面是分隔符

用上面这种就很容易把列表转换为字符串了,元组,字符串,字典都可以用

元组必须加小括号不然会报错,python会认为逗号是分隔了两个参数。这里再讲一下分片吧,a[::-1]第一个冒号是表示全部元素,第二个冒号加上数字表示步长:-1就是从右向左,用负步长需要注意第一个冒号前后的数字大小


第一个冒号前没有填的是表示到边界,上图第一个冒号右边没有那就一直到左边界,也就是索引是0的元素(python索引开始值是可以自己设的,默认是0),并且包括这个元素。还需要注意第一个冒号后面的数是不包括进去的,对比一下上面两个图。如果是正步长

第一个冒号后面没有数字就一直到最大索引值的元素,也包含这个元素。

字典也是可以用join来连接,连接的是key,下面会说什么是字典和key

在这里再介绍一个bif内置函数split

可以看到split括号里是分隔的字符,这个内置函数返回的是一个列表,可以用join转为字符串。需要提醒的是,字符串的bif操作是不会改变原字符串的,它产生一个新的字符串,如果没有标签给这个新字符串,它很快会被python回收

上面操作都没与改变a

关于尾递归


都摘自百度百科,这都是理论,下面我们举例感受,我们还是拿以前算阶乘为例

普通递归

我们来看他的内存占用情况:

a(5)

5*a(4)

5*4*a(3)

5*4*3*a(2)

5*4*3*2*a(1)

5*4*3*2*1

5*4*3*2

5*4*6

5*4

20

过程就是这样:要知道a(5)就得知道a(4),并且这个5还要存起来,要想知道a(4)就得知道a(3),并且5和4都要存起来,依此类推,最后直到返回条件a(1)=1,然后可以计算a(2)=2*a(1),再计算a(3)=3*a(2)...最后得到答案。

尾递归

尾递归需要两个参数,n我理解为还需要递归的次数,当n==0时,也就是不需要在递归时,返回结果,否则,继续递归,result是我们要的结果,一般会设置默认参数,这里是算阶乘所以默认是1,默认值视情况而定。我们来看内存占用

a(5,1)

a(4,5)

a(3,20)

a(2,60)

a(1,120)

120

迭代

如何写一个尾递归?理论上只需要return后面是一个纯函数比如a(n-1,n*result),而不是n*a(n-1),后一种无法更新a函数里的实际参数,只是新建了一个栈,因为n和a(n-1)都需要存。尾递归和迭代内存占用都不多,但是函数调用压栈弹栈是需要时间的,所以我认为至少再计算阶乘这个问题上尾递归还是比迭代要慢。斐波那契数列我认为也不是一个尾递归,以求a(4)为例,内存占用:

a(4)

a(3)+a(2)

a(2)+a(1)+1

1+1+1

2+1

3

斐波那契和汉诺塔笔者想不出来怎么写尾递归,如果有高人,请在评论区指教,尾递归笔者参考了https://www.zhihu.com/question/20761771,有兴趣的可以去看下,笔者基本都说到了。笔者还要说一下,关于数据存储结构的问题,笔者还没有开始学习,解答不了,以后有机会可能学了数据结构还会来看以前发过的文章,在下面加评论。

这一讲开始我们学习字典,字典是一种映射类型,字典不是一种序列,字典的关键字我们叫做key,值叫做value,字典也可以叫做哈希表或者关系数组。比如你去查one的意思,one就是key,1就是value。字典用大括号括起来,字典调用要输入key而不是索引,它不是序列没有索引,我们来实践一下


in函数只能访问key(如果不用bif的话),key不能是一个列表。元组和字符串都可以当一个key


字典也不可以是一个key。

字典就是一种对应关系那么其实下面通过索引映射也是可行的,但是麻烦

但是效率不高,也多少有些别扭。我们也可以用zip打包它们或者用前面学过的map()

创建字典还有以下方法

我们可以看到对应关系可以用元组,也可以用列表,也就是里面第一层括号,逗号前面是key后面是value,所有对应关系可以放在一个列表或者元组中,也就是从里向外第二层括号,因为dict只能有一个参数,第三层括号是dict这个工厂函数的,int,str,float,list,tuple都是工厂函数,它们产生特定类型。

还可以使用关键字,但是关键字只能是字符串的内容,比如

但是关键字这种做法key不可以是元组,只能先把元组转化为字符串再提取内容,

那么可不可以有key对应多个value呢?

python报错了,是不可以的。

字典和列表不同的是,如果你给一个字典里不存在的key赋值,它不会报错,会加上这个key进去,但是相同的是,如果你直接访问一个不存在的key,它会报错


这里还要说的是,大括号也不一定是字典,以前我们就见过大括号一次

a没有映射关系,只有key,我们看到他的类型是集合。

下面介绍一些dict的内置方法,你可以通过help(dict)来查看

第一个fromkeys

返回的是一个新的字典,有两个参数,第一个参数是key,第二个是value,第二个可以没有,默认是None。

注意只能有两个参数

而且注意它生成的是新的字典,不会影响原来的字典,所以修改字典中的key对应的value是不能用它的

下面是keys,values和items


举几个例子

get也是一种访问字典的方法


可以看到和普通的访问不同,如果这个key在字典里不存在,get不会报错,默认会返回None,当然返回内容可以自己设置。如果单纯只是想知道这个key在不在字典里,可以直接用in和not in

下面介绍和列表一样的clear

​这里的道理笔者再列表那里就讲过了,python里的变量就是个标签。上图中的a.clear用了bif改变的是a这个标签对应的字典的内容,而a={}只是把a这个标签从原来的字典上撕下来,贴到空字典上而已。

今天由于笔者有事就只能先写到这里了,先给大家说声抱歉,笔者外公过世了。笔者看到辛苦写的文章只有这么少的喜欢收藏和评论,内心更加悲痛,说不定就拖更甚至不更了呢。所以求各位小伙伴觉得好的话随手点个喜欢或者收藏,谢谢大家。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值