# 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
weeks = ('周一', '周二', '周三', '周四', '周五', '周六', '周天')
print(weeks.index('周一'), weeks[-1], weeks[2])
# 0 周天 周三
print(weeks[1:-1:2])
# ('周二', '周四', '周六')
print(weeks[1:-1:-1])
# ()
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
# 假设有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)
# 周天
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'>
元组本质上和列表没有区别,两个都是容器型类型数据,一个是不可变的数据类型,一个是可变的类型数据,基本列表能做的操作,元组也可以,只要不涉及到增删改。