元组的性质、打包与解包、相关方法

day10下创建一个名为01-元组的代码文件。

前面说的列表是可变的(动态数据) --> 容器型数据类型:列表字符串、元组

一、元组是不可变类型的数据(静态数据)

问:有列表了,为什么还要创建个元组?程序需要考虑性能。元组要比列表更加轻量,变相的说:元组性能优于列表python在后台有一个垃圾回收机制

答:1、对静态数据(不可变)做一些资源缓存,垃圾回收机制的存在,使得一些不被使用的变量释放出它所占用的内存,返还给操作系统,以便其他变量或其他应用使用
2、对于静态数据,例如:元组。如果他不被使用,并且所占内存空间很小时,python不会将其回收,会暂时缓存这部分内存,这样,下次在创建同意大小的元组时,不需要再向系统申请,可以直接拿过来使用,这样就大大加快了程序的速度。

二、元组和列表性能比较

import time

start1 = time.time()
x = [1, 2, 3, 4, 5]
end1 = time.time()
print(start1 - end1)

start2 = time.time()
y = (1, 2, 3, 4, 5)
end2 = time.time()
print(start2 - end2)

timeit --> 也能测试程序的执行时间(用于计时小代码的)

timeit()方法有个默认值number,number的默认值为1000000,也就是说,调用的timeit方法变相的相当于将Timer类接受到的一小段代码执行1000000次,ctrl + 方法
import timeit

t1 = timeit.Timer('x = [1, 2, 3, 4, 5]')
print(t1.timeit())
t2 = timeit.Timer('y = (1, 2, 3, 4, 5)')
print(t2.timeit())
打印结果为:

在这里插入图片描述

day10下创建一个名为02-元组相关知识的代码文件。


一、性质

1、元组时不可变的容器型数据类型
2、元组是有序的容器型数据类型(有下标)
3、元组中的元素可以是任意类型的元素
4、元组是类型:tuple; 容器符号:();元组之间使用逗号隔开

二、创建元组

----> 创建列表:
[], [1], [1, 2]
----> 创建字符串:
'', 'a'
----> a、创建元组
t1 = ()
print(t1, type(t1))
----> b、创建有一个元素的元组
t2 = (1,)
print(t2, type(t2))

t3 = (1)
print(t3, type(t3))
打印结果为:

在这里插入图片描述

三、下标、切片、循环遍历

元组、列表、字符串的下标、切片、循环遍历是一模一样的
从左向右,从0递增;从右向左,从-1开始递减。----> len方法能求出容器的长度

四、拼接、重复

print((1, 2, 3) + (1,))
print((1,) * 10)

五、成员运算:in 、not in ----> 判断元素是否在容器中存在

print(2 in (1, 2, 3))
print((2,) in (1, 2, 3))
打印结果为:

在这里插入图片描述

六、思考:C语言中两个变量交换值

a = 100
b = 200

想要b=a,引入中间变量

t = a
a = b
b = t
print(a, b)

在python中

a, b = b, a
print(a, b)
元组的打包操作和容器的解包操作

打包操作 ----> 在python中,允许一个变量同时等于多个值,多个值会被打包成元组

x = 1, 2, 3
print(x)

解包操作 ----> python中两个变量和三个变量的交换是应用了python字节码指令中的ROT_TWO和ROT_THREE指令,当需要交换值的变量大于三时,才是应用了解包和打包操作

i, j, z = x
print(i, j, z)
打印结果为:

在这里插入图片描述

七、更高级的解包操作

两个变量去解5个变量的元组 ----> too many values to unpack

x = (1, 2, 3, 4, 5)
i, j = x  
# print(i, j) 

解包失败,只能这样吗?

情况一:解包的变量和容器中元素个数相等
i, j, z, a, b = x
print(i, j, z, a, b)  
情况二:解包的变量数量小于容器中元素的个数
1、将 * 放在变量前,可以使这个变量变成不定长变量
i, *j = x
print(i, j)  # --> 1 [2, 3, 4, 5]
2、将定长变量
i, *j, z = x
print(i, j, z)  # --> 1 [2, 3, 4] 5
情况三:解包的变量数量大于容器中元素的个数(几乎遇不到)

注意:如果解包操作涉及到不定长变量,不定长变量只有一个,优先给定长变量赋值

x, y, *m, n = [11, 22, 33, 44, 55]
a, b, *c, d = [1, 2, 3]
print(x, y, m, n, a, b, c, d)

问:x, y, m, n, c, d分别是多少?

打印结果如下:

在这里插入图片描述

八、元组的相关方法

max, min, count, sum, sorted, index在元组中同样适用

1、max、min: 求最大值、求最大值(注意:容器中元素的类型要一致)
2、sum:求和(要求容器中元素都得是数值)
3、count:求某个元素出现的次数
4、sorted:默认将元素从小到大排序(注意:容器中元素的类型要一致)
5、index:从左向右查找元素,找到此元素就停止查找,没找到报错。

IT行业常说的行业黑话(约定成俗的某些东西):CRUD ----> 什么是CRUD?增删改查

九、元组的删除

元组是不可变数据类型,不能进行元素的CUD操作。但是可以对整个元素进行删除操作。

t = (1, 2)
print(t)
del t
# print(t)    name 't' is not defined
元组就到这里啦!!!下期我们进入集合的学习!!!
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值