本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p=6&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb
上节课学习了序列的索引及切片操作,序列的相关操作,列表的基本操作,列表的特殊操作,本节课记录的知识点有元组的创建与删除,元组的访问及遍历,元组生成式。
1.元组的创建与删除
元组是Python的不可变数据类型,它不能像列表那样可以增删改查,元组只可以通过索引来获取元素,使用for循环去遍历元素。在Python中使用( )来定义一个元组(列表是用中括号[ ]来定义的),元素之间用英文逗号进行分隔。
下面是元组的创建的实例,这部分有三个大知识点,首先是元组的两种创建方式,一个是直接“元组名()”,一个是用tuple创建。因为元组也是序列,序列的相关操作也同样适用于元组。其次注意就算只有一个元素,若想创建元组必须加上“,”。
t=('hello',[10,20,30],'python','world')
print(t)
#2.使用内置函数tuple()创建元组
t=tuple('helloworld') #元组的元素是字符串,可以看到该字符串里的 每一个字母都是单独的字符串元素在元组里
print(t)
t=tuple([10,20,30,40]) #元组的元素是列表,结果就是它将列表中的元素当做元组中的元素了
print(t)
#二、元组作为序列,相关操作
#由于元组也是序列。也就是说关于序列的操作也可以用在元组上
t=tuple([10,20,30,40])
print('10在元组中是否存在:',(10 in t)) #判断元素是否在元组里
print('10在元组中是否存在:',(10 not in t)) #判断元素是否不在元组里
print('最大值:',max(t)) #找元组的最大值
print('最小值:',min(t)) #找元组的最小值
print('len:',len(t)) #计算元组的长度
print('t.index:',t.index(10)) #查找10这个元素的索引号(从0开始)
print('t.count:',t.count(10)) #查找10这个元素的个数
#三、特别注意,如果元组中只有一个元素
t=(10)#如果这样写输出结果会发现,这不是元组类型的数据了
print(t,type(t))
#正确示范:如果元组中只有一个元素,逗号不能省
y=(10,)
print(y,type(y))
结果如下:
下面是元组的删除操作:
#四、元组的删除
t=tuple([10,20,30,40])
del t
print(t) #此时已经没有t这个元组了,所以这一句代码肯定就会报错
2.元组的访问及遍历
上面提到元组只可以通过索引来获取元素,并且它的遍历与列表的遍历完全相同,有两种索引方式,不过注意enumerate(元组名)的使用,这样默认是索引从0开始到 len(元组)-1 结束,特别的:
enumerate(元组名,start=我想开始的数字)
可以设定第一个的索引号是多少。
切片操作也是跟列表相同,都是“新的元组=元组名[起始位置:终止位置(取不到):步长]”。下面是元组遍历的实验:
t=('python','hello','world')
#根据索引访问元组
print(t)
t2=t[0:3:2] #元组支持切片操作,[起始位置:终止位置(取不到):步长]
print(t2)
#元组的遍历
for item in t: #item就是元素的意思,这就是个符号,这个单词当然可以换成别的字符(比如i),这句话就是输出t中的每一个元素
print(item)
#1.for+rangei()+len()
for i in range(len(t)): #其实就是省略了起始位置和终止位置,默认从下标为0,到下标为长度的元素(不包括这个数字,所以最后一个元素也可以输出)
print(i,t[i])
#2.使用enumerate()
for index,item in enumerate(t): #这里index表示索引(下标),item表示元素
print(index,'------>',item)
#设定它的序号,跟列表遍历相似,通过enumerate(元组名,start=我想开始的数字)来实现的
for index,item in enumerate(t,start=11): #这里index表示索引(下标),item表示元素
print(index,'------>',item)
结果如下:
3.元组生成式
列表是有生成式的,那么元组有无生成式?答案是有,但是与列表不同,元组的生成式是一个生成器对象,它需要转化成列表或者元组才能看到内容。
首先是元组是生成式形式,以遍历range中的元素为例,元组名字=(元素 for i in range(开始,结束)),查看这个生成器结果发现根本不是内容。然后再转成元组来查看内容。
t=(i for i in range(1,4))
print(t) #结果是一个生成器对象,而不是具体的内容
#为了能够看到具体的对象,可以将其转换为元组
t=tuple(t)
print(t)
#遍历
for item in t:
print(item)
结果:
下面是__next___()方法,注意该方法只能适用于生成器,而生成器是无法显示其内容的,因此要想查看该方法对元组生成器作用后得到什么,还是得将生成器转化为元组,print查看。
t=(i for i in range(1,4))
print(t) #结果是一个生成器对象,而不是具体的内容
#为了能够看到具体的对象,可以将其转换为元组
'''
#这两句注释的原因是,这一步把t变成了元组,而__next__是针对于生成器的语法
t=tuple(t)
print(t)
'''
'''
#遍历
for item in t:
print(item)
#解释一下这里为什么注释掉,因为遍历过一遍后,该对象就不存在元素了
#所以为了使接下来next方法有元素可取,就不能执行这个遍历代码
'''
print(t.__next__()) #注意,这句代码是一个元素一个元素地取出来
print(t.__next__())
print(t.__next__()) #到这一步就都取完了,t里面空了
t=tuple(t)
print(t) #此时__nest__()已经把生成器里面的元素都取出来了,当然原来的元组就空了
结果:
本节完