1、元祖的定义
一组有序数据的组合,元祖一旦定义不可修改,是不可变数据类型
- 定义空元祖
变量=()
变量=tuple()
变量=(内容1,内容2,内容3,……)直接赋值
特列:变量=内容1,内容2,内容3,……
- 元祖不可改变新,只能使用索引进行访问,不能改变,只读不写
元祖的操作
定义元祖是,如果只有一个元素也要使用逗号分割
mytuple=(1,)
- 元祖也可以使用切片来访问元祖元素,当列表处理就好
mytuple=(1,3,5,7,9,3,4,5,67,98,8)
print(len(mytuple))#11
res1=mytuple[1:5]
print(res1)#(3, 5, 7, 9)
res2=mytuple[1:10:2]
print(res2)#(3, 7, 3, 5, 98)
- 统计元素出现的次数,count()
mytuple=(1,3,5,7,9,3,4,5,67,98,8)
res=mytuple.count(3)
print(res)#2
- 查找特定元素在元祖的索引值
mytuple=(1,3,5,7,9,3,4,5,67,98,8)
res=mytuple.index(98)
print(res)#9
res=mytuple.index(5,2,9)#从第三个到第10个元素查找元素5的位置
print(res)#2
- 元祖的加法运算(合并运算),乘法运算,赋值n次
mytuple1=(1,3,5,7,98)
mytuple2=(67,98)
res=mytuple1+mytuple2
print(res)#(1, 3, 5, 7, 98, 67, 98)
res=mytuple1*3
print(res)#(1, 3, 5, 7, 98, 1, 3, 5, 7, 98, 1, 3, 5, 7, 98)
- in 运算
mytuple1=(1,3,5,7,98)
res=3 in mytuple1
print(res)#True
2、元祖的推导式
元祖推导式产生的是生成器(generate)
语法:
( 变量运算 for item in 容器):返回一个元祖生成器
生成器是一个特殊的迭代器,生成器可以自定义,也可以使用元祖推导式去定义。
- 生成器是按照某种算法去推算下一个数据或结构,只需要往内存中存储一个生成器
- 生成器语法:
1、里面是推导式,外面是一个(),结果就是一个生成器
2、自定义生成器,含有yield关键字的函数就是生成器,含有yield关键字的函数,返回的结果就是一个迭代器,换句话说,生成器函数就是一个返回迭代器的函数
mytuple1=(1,3,5,7,98)
res=(item**2 for item in mytuple1)
print(res)#<generator object <genexpr> at 0x000001FD90722CF0>返回的是生成器
#生成器是迭代器的一种可以使用for循环来操作
# for item in res:
# print(item)
#也可以使用next来操作
# print(next(res))
# print(next(res))
# print(next(res))
# print(next(res))
# print(next(res))
#还可以使用list来操作
print(list(res))#[1, 9, 25, 49, 9604]
3、元祖的生成器yield关键字
yield关键字使用在生成器函数中,
yield和函数中的return很像
yield函数和return一样,执行到这个关键字后,会把结果返回。
和return不一样,yield会返回结果,并记住当前代码的执行位置,下一次调用时会从上一次离开的位置继续向下执行。而return是重新执行
执行过程:
1、第一次调用迭代器
走到当前的生成器函数中,遇到了yield1,把1返回,并且记住当前的执行状态(位置),暂停执行,等待下一次的调用
2、第二次去调用迭代器
从上一次遇到的yield位置开始执行,遇到了yield2,把2返回,并记住状态,暂停执行,等待下一次调用
3、第三次去调用迭代器
从上一次遇到的yield位置开始执行,遇到yield3,把3返回,并记住了状态,暂停执行,等待下一次调用
如果在最后有调用了迭代器,会从上一次的yield位置开始,后面没有了,直接超出范围,报错
def myyield():
print('hello')
yield 1
print('world')
yield 2
res=myyield()
print(list(res))
for item in res:
print(item)
4、字典及定义
键值对
键不能重复<