我想当第一

本节内容:

一.元组的定义和基本操作

元组和列表一样,是一组有序序列的组合,但是一经定义就无法修改,因此元组称为不可变数据类型

1.定义

元组定义:
定义空元组 变量=(),或者 变量=tuple()
还可以使用 变量=(1,2,3)定义含有数据的元组
注意:如果元组中只有一个元素是,必须加逗号 ==> 变量=(1,)
特例:变量=1,2,3 这种方式也可以定义一个元组

2.基本操作

vart = (1,2,5,1,3,4,2,6)

#元组的切片操作(遵循左闭右开原则)print(vart[:]) #获取全部数据
print(vart[::]) #获取全部数据
print(vart[1:]) #从下标1的位置获取到最后
print(vart[1:3]) #从索引1开始获取到索引3之前
print(vart[1:5:2]) #从索引1开始获取到索引5之前,步进值为2
print(vart[:3]) #从开始获取到索引值3之前
print(vart[::2]) #从开始获取到结束,步进值为2
print(vart[5:1:-1]) #从索引5开始,获取到索引1之后,倒着输出

统计一个元素在元组中出现的次数print(vart.count(2))

#获取一个元素在元组中的索引值print(vart.index(2))
print(vart.index(2,3))
#从指定下标位置开始查找,此处从3下标的位置往后查找
print(vart.index(2,3,7)) #从指定的区间查找,此处区间为下标3到下标7之间

元组的加法,乘法运算print(vart + (‘a’,‘b’)) #合并元组称为一个新的元组
_print(vart*3)
#重复元组的数据

检测一个元素是否在元组中print(2 in vart) #True
_print(2 not in vart)
#False_

二.元组推导式<==>生成器

1.介绍

**元组推导式 也叫 生成器,是等价的
列表推导式返回一个列表,元组推导式返回的是生成器
语法:
列表推导式 ==> [变量运算 for i in 容器] ==>结果是一个列表
元组推导式 ==> (变量运算 for i in 容器) ==>结果是一个生成器

生成器是什么?
生成器是一个特殊的迭代器,可以自定义,也可以使用元组推导式去定义
生成器是按照某种算法去推算下一个数据或者结果,只需要往内存中存储一个生成器,节约内存消耗,提升性能
语法:
1)里面是推导式,外面是()的结果就是一个生成器
2)自定义生成器,含有yield关键字的函数就是生成器,生成器函数就是返回迭代器的函数
如何操作生成器?
生成器是迭代器的一种,因此可以使用迭代器的方式(list+next+for循环)**

2.示例

_#列表推导式
_varlist = [1,2,3,4,5,6,7]
newlist = [i2 for i in **varlist]
print(newlist)

_#元组推导式 generator
_newt = (i2 for i in **varlist)
print(newt) #输出一个生成器,可以使用下面三种方法调用

_#使用next()函数调用
_print(next(newt))

_#使用list或tuple函数进行操作
_print(list(newt))
print(tuple(newt))

#使用for进行遍历
for i in newt:
print(i)

3.生成器与yield关键字

yield关键字使用在生成器函数中
和函数中的return很像
共同点:执行到这个关键字都会把结果返回
不同点:
return会把结果返回并结束函数的调用
yield会返回结果,并记住当前代码执行的位置,下一次调用时会从上一次离开的位置继续向下执行

示例如下:
#定义一个普通函数
def hello():
print(‘hello world’)
return 1 #return在函数中将结果返回,并且后面的代码不再执行
print(‘iloveyou’) _hello()

#使用yield定义一个生成器函数
def hello():
print(‘hello world’)
yield 1
print(‘iloveyou’)
yield 2

_#调用生成器函数,返回一个迭代器
_res = hello()
next(res)
next(res)

_#使用list类似的函数 去调用生成器返回的迭代器时,会把迭代器的返回结果,作为容器的元素
_r = list(res)
print(r)

for i in res:
print(i)

4.练习-斐波那契数列


#普通方法
def fibo(num):
i,j,k = 1,1,0
while k print(j,end=‘,’)
i,j = j,i+j
k+=1
fibo(3)
_#生成器
_num =int(input(‘请输入你想取到的项数’))
def fibo(num):
i,j,k = 1,1,0
while k yield j
i,j = j,i+j
k+=1
res = fibo(num)
print(list(res))