30 days Python
引言
本人为一个编程小白,针对自己的学习情况发帖子记录自己的学习生活,以此激励和锻炼自己学习能力以及写文章的能力。
Days 05 Tuple
5.1 元组的定义
元组的每一笔数据称元素,元素可以是整数、字符串或列表等,这些元素放在小括号() 内彼此用逗号隔开,可以使用print()函数将元组名称当作变量名称打印即可。
5.2 优势
与列表最大的差异是,元组的元素值与元素个数不可更改,有时又被称为不可改变的列表。
元组对比列表的优点:
1、可以更安全的保护数据,程序设计中有些数据可能永远不会改变,将他储存在元组中,可以被安全地保护,例如:图像处理时对象的长、宽或每—像素的色彩数据,很多是元组数据类型。
2、元组(tuple)结构比列表(list)简单占用较少的系统资源,程序执行时速度比较快。
了解了上述元组的优点后’未来设计程序,如果确定数据可以不更改,就尽量使用元组数据类型。
5.3 元组切片
<img src="C:\Users\hp-pc\Desktop\1690275906066.png" style="zoom:70%;" />
列表切片(用于对比)
"""
list[start:end] =>读取索引从start到end-1
list[:end] =>读取索引从最前面到end-1
list[:-n] =>读取索引,不含最后n名
list[-n:] =>获取列表最后n名
list[:] =>获取所有元素
list[start:end:step]
list[::-1] =>获得列表的颠倒排序,但原列表未改变
"""
5.4 遍历元组
# 用for遍历元组
keγs=("ic!", 'xabb',9099) #定义元组元素是字符串与数字
for key in keγs:
print(key)
ic!
xabb
9099
5.6 元组中使用enumerate对象
drinks = ["coffee","tea","wine"] #借用Day03代码
enumerate_drinks = enumerate(drinks)
list02 = list(enumerate_drinks)
print("转成列表输出,初始索引值为 0=",list02[0] ) #list();tuple()可以转化成列表、元组
tuple02 = tuple(enumerate(drinks,10))
print("转成列表元组,初始索引值为 10=",tuple02 )
print("转成列表元组,初始索引值为 10=",tuple02[1] )
转成列表输出,初始索引值为 0= (0, 'coffee')
转成列表元组,初始索引值为 0= ((10, 'coffee'), (11, 'tea'), (12, 'wine'))
转成列表元组,初始索引值为 0= (11, 'tea')
5.7 多重指定、打包与解包
在程序开发的专业术语中,我们可以将列表、元组、字典、集合等称容器,在多重指定中,等号左右两边也可以是结构相同的容器。
#解包
x, y= (10, 20) #元组的解包
[a, [b, c]] = (1, (2, 3))
#多重指定(在Day03学列表中学过)
d,e,*f = 1,2,3,4,5 ##等号左边变量较少,可以用*表达式,将多余的右边打包给*变量成为一个列表
运行结果:x=10, y=20, a =1, b=2, c=3
d=1, e=2, f=[3,4,5]
5.7.1 zip(lterable)方法打包多个对象
names = ("Jacky","Eric","Geogy")
olds = (18 ,21 , 24)
zipdata = zip(names, olds)
player = list(zipdata)
print(zipdata) # 输出的是:<zip object at 0x0000017BC22A1988>
print(player) # 需要转化成列表[('Jacky', 18), ('Eric', 21), ('Geogy', 24)]
lterable必须是多个可迭代对象!! 若lterable里面的对象长度不相等,则转化成列表后,zip对象元素数量将是对象中元素最少个数
5.7.2 zip(*lterable)相当于unzip对象
name , old = zip(*player)
print("names =",name) # names = ('Jacky', 'Eric', 'Geogy')
print("old =", old) # old = (18, 21, 24)
5. 8 元组生成式(tuple generator)
x = (n for n in range(3)) #与day03 列表生成式类似
xlst = list(x)
print(xlst) #(0, 1, 2)
5.9 Else
元组的其他操作 |
功能 |
max(tuple) /min(tuple) |
找tuple中最大/最小值 |
sum(tuple) |
元素为数字情况求元组内元素之和 |
len(tuple) |
返回元组元素个数 |
商,余数 = divmod(除数,被除数) |
除法,返回值为元组(商,余数) |
5.10 小测验
T1. 假设有n=4个数据,计算均值、方差、标准差 vals=(5,6,9,8)
mean_vals = sum(vals) / len(vals)
var_vals = ((val - mean_vals)**2 for val in vals)
vars = sum(tuple(var_vals)) / len(vals) #这里分母如果用 len(tuple(var_vals))会报错,generator对象不会记住所拥有的内容,第二次使用会成为空元组
dev = pow(vars,0.5)
print("平均值为{},方差为{},标准差为{}".format(mean_vals,vars,dev))
#平均值为7.0,方差为2.5,标准差为1.5811388300841898
T2. 计算地球到月球的时间,dist = 384400km speed = 1225 马赫速度= 1225/hour
dist = 384400
dayspeed = 1225*24
time = divmod(dist,dayspeed)
print("总共需要{}天,{}小时".format(time[0],time[1] / 1225))
#总共需要13天,1.7959183673469388小时