Python入门:对Excel数据处理的学习笔记【第六章】元组类型处理技术

注:该学习笔记是根据曾志贤老师编写的《从Excel到Python,用Python轻松处理Excel数据》所学习整理的笔记。

第六章 元组类型处理技术

Python中元组与列表类似,同属序列类型,都可以按照特定顺序存放一组数据,数据类型不受限制,切片方式相同。
区别在于元组存储的数据不能被修改,比如不能对元组的元素进行添加、删除。可以将元组看作是只读属性的列表。
元组的优势是占用内存小,存取速度快。

一、元组的创建与删除

元组用小括号(())表示,元组里的元素用逗号分隔。

tup1=()
print(type(tup1)) #返回 <class 'tuple'>
tup2=tuple()
print(tup2) #返回 ()
tup3=(1,2,3)
print(tup3) #返回 (1,2,3)
tup4=(100,)
print(tup4) #返回 (100,)
del tup3
print(tup3) #返回 错误(因为tup3已被删除)

二、元组的基本操作

元组虽然没有列表灵活,但一些基本的操作还是可以实现的,比如切片、合并、循环、推导、转换等。

1、元组的合并

tup=(1,2,3)
print(id(tup),tup) #返回tup的内存地址 与元组
tup +=(4,5,6)
print(id(tup),tup) #返回tup的内存地址 与元组
#合并元组后,tup内存地址不相同,代表组合后的tup并非组合前的tup,而是新产生的tup

2、元组的复制

元组也可以分为浅复制与深复制,只不过浅复制只能使用copy模块中的浅复制,而列表的浅复制可以直接使用copy函数。
当元组中有不可变类型的对象时,执行深复制和浅复制都不会再开辟内存空间,而是用的同一个内存地址;当元组中有可变类型的对象时,执行深复制会重新开辟一个内存空间。

import copy
tup1=(1,2,3) #不可变对象
print(id(tup1),tup1)
tup11=(1,[2],3) #包含可变对象
print(id(tup11),tup11)
#浅复制 不论复制可变对象还是不可变对象,都不会改变id
tup2=copy.copy(tup1)
print(id(tup2),tup2) #返回的id与tup1的id相同
tup22=copy.copy(tup11)
print(id(tup22),tup22) #返回的id与tup11的id相同
#深复制  不可变对象,id不会改变
tup3=copy.deepcopy(tup1)
print(id(tup3),tup3) #返回的id与tup1的id相同
tup33=copy.deepcopy(tup11)
print(id(tup33),tup33) #返回的id与tup11的id不相同

3、元组的循环

元组可以像列表一样做元组推导式和for循环,在返回一个新元组。
元组推导式的结果不是元组,而是生成器,生成器也是可迭代对象。生成器可使用tuple类对象将其转换为元组。当然也可以转换为其他类对象,例如list类对象。

tup=(1,2,3)
#推导式方式的写法
tup1=(t*10 for t in tup)
print(tup1)
#返回 <generator object <genexpr> at 0x000001AEF5B244A0> 生成器,也是迭代对象
print(tuple(tup1)) #将生成器转换为元组

#循环方式的写法
tup2=()
for t in tup:
    tup2 +=(t*10,) #进行累积组合,必须要将循环的元素也加上(),才能表面是元组。
print(tup2)

4、元组的转换

在Python中,可以使用tuple类对象创建或转换一个元组对象,以及可以将其他可迭代对象转换为元组。
语法结构:
tuple([iterable])
参数说明:

  • iterable:可选参数,要转换为元组的可迭代序列。
print(tuple('123')) #将字符串转换为元组
print(tuple([1,2,3])) #将列表转换为元组
print(tuple({1,2,3})) #将集合转换为元组
print(tuple({'a':1,'b':2,'c':3})) #将字典中的键转换为元组
print(tuple(zip([1,2],[10,20]))) #将可迭代对象转换为元组
print(tuple(range(1,10))) #将可迭代对象转换为元组
案例一、将单列数据转换为多行多列数据

在“名单”工作簿中的“名单表”工作表中按照用户指定的列数进行转换。

在这里插入图片描述
转换前
在这里插入图片描述
转换后

import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('名单.xls')
ws=wb.sheet_by_name('名单表')
nwb=copy(wb)
nws=nwb.add_sheet('处理后')
col_vals=ws.col_values(0)
col_count=int(input('请输入每行存放的数量:'))
lst=[]
if ws.nrows%col_count==0: #这段if判断生成最大行数
    row_count=ws.nrows//col_count
else:
    row_count=ws.nrows//col_count+1
col_num=tuple(range(0,col_count))*row_count #将最大行数拆分
for r in range(0,row_count): #这段for循环生成将要输出值所需要放在的行号
    for v in (r,)*col_count:
        lst.append(v)
row_num=tuple(lst) #将它转换为元组类型
num=tuple(range(1,ws.nrows+1)) #生成序号
for i,j,k,l in zip(row_num,col_num,num,col_vals): #将行、列、序号、值从组放入对应的单元格位置
    nws.write(i,j,'{}:{}'.format(k,l))
nwb.save('名单-1.xls')

5、元组常用统计函数

tup=(50,60,74,63,50,95,74,80,50)
print(len(tup)) #计数
print(max(tup)) #最大值
print(min(tup)) #最小值
print(sum(tup)) #求和
print('{:.2f}'.format(sum(tup)/len(tup))) #平均数
print(tup.count(50)) #条件计数
print(tup.index(80)) #条件定位
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MeJonKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值