Pyhton基础学习系列10——元组


一、元组是什么?

  1. 元组是容器型数据类型,将()作为容器的标志里面多个元素用逗号隔开:(数据1, 数据2, 数据3,…)
  2. 基本与列表相同,唯一不同是列表是可变的数据类型,元组是不可变的数据类型,不支持增删改操作
  3. 元组是有序的数据类型,支持索引操作
  4. 任何类型的数据都可以作为元组的元素
  5. 元组的处理速度要比列表快。(不可变的数据类型处理速度都比可变的类型数据快)

二、元组的使用方法

1.创建

  • 与列表的创建相似只不过一个是 [ ] 一个是 ( )
# 1)空元组
t1 = ()
print(t1,type(t1))
# () <class 'tuple'>

# 2)只有一个元素的元组: 在唯一的元素后面必须有一个逗号
t2 = (100,)
print(t2, type(t2))
# (100,) <class 'tuple'>
# 没有逗号就会默认为()为运算符代表一个整体
t2 = (100)
print(t2, type(t2))
# 100 <class 'int'>

# 3)在没有歧义的情况下,元组的小括号可以省略(所谓到的歧义就是不做任何计算的情况,有括号和没括号计算出来的情况不一样)
t3 = 10, 20, 30*2
print(t3)       # (10, 20, 60)

t4 = (10, 20, 30)*2
print(t4)       # (10, 20, 30, 10, 20, 30)

t5 = 10, 20, 30  
print(t5)	# (10, 20, 30)


# 4)元组是有序的
print((10, 20, 30) == (20, 10, 30))     # False

2.查操作

  • 元组获取元素的方式和列表获取元素的方式一样并且也支持切片操作index查找下标等操作
weeks = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
print(weeks.index('周一'), weeks[-1], weeks[2])
# 0 周天 周三
print(weeks[1:-1:2])
# ('周二', '周四', '周六')
print(weeks[1:-1:-1])
# ()

3. 通过多变量获取元素 - 所有有序容器都支持

  • 让变量的个数和序列中元素的个数保持一致
t1 = (10, 20, 30)
x, y, z = t1
# 效果等同于 x, y, z = 10, 20, 30
print(x, y, z)
# 10 20 30

c1, c2, c3 = 'abc'
print(c1, c2, c3)
# a b c
  • 当变量的个数小于序列中元素的个数的时候必须在其中某一个变量的前面加*
  • 解释:当一个序列中的元素有N个,变量有M个,同时M<N,如果要存元素就得在其中一个变量中加*号,不然会报错
# 假设有weeks = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')7个元素,如果我要存元素
# 先看带星号的变量,如果在最后那前面的变量就分别代表着第一个开始的元素,直到全部变量都一一对应存完,如果星号在最前面则与之相反。
# 带星号的变量存储剩下的所有元素。
# 如果星号在中间,那左右两边的变量就代表着刚开始和结束的元素。

# 星号在最后
x, y, *z = weeks
print(x)
# 周一
print(y)
# 周二
print(z)
# ['周三', '周四', '周五', '周六', '周天']

# 星号在中间
weeks = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
x, *y, z = weeks
print(x)
# 周一
print(y)
# ['周二', '周三', '周四', '周五', '周六']
print(z)
# 周天

# 星号在最左边
weeks = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
*x, y, z = weeks
print(x)
# ['周一', '周二', '周三', '周四', '周五']
print(y)
# 周六
print(z)
# 周天

4. 相关操作、函数和方法

  • 列表中所有和可变无关操作、函数和方法元组都支持
  • 元组排序完以后返回的是列表数据类型
t1 = (10, 2, 30)
t2 = (100, 200)
print(t1 + t2)
# (10, 2, 30, 100, 200)
print(t1 * 3)
# (10, 2, 30, 10, 2, 30, 10, 2, 30)
print(t1 > t2)
# False
print(10 in t1)
# True
print(sum(t1))
# 42
print(max(t1), min(t1))
# 30 2
print(sorted(t1))
# [2, 10, 30]
print(type(sorted(t1)))
# <class 'list'>

三、元组推导式

  • 格式1:tuple(表达式 for 变量 in 容器(可迭代对象))
  • 格式2:tuple(表达式 for 变量 in 容器(可迭代对象) if 条件)
  • 因为直接用括号返回的是生成器对象所以要加tuple
tup1 = (x for x in range(1, 10))
print(tup1)  # 返回生成器对象
# <generator object <genexpr> at 0x00000000012020B0>

tup2 = tuple(x for x in range(1, 10))
print(tup2)
# (1, 2, 3, 4, 5, 6, 7, 8, 9)
tup2 = tuple(x for x in range(1, 10) if x % 2 == 0)
print(tup2)
# (2, 4, 6, 8)

总结

元组本质上和列表没有区别,两个都是容器型类型数据,一个是不可变的数据类型,一个是可变的类型数据,基本列表能做的操作,元组也可以,只要不涉及到增删改。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值