元组:带了紧箍咒的列表
- 元组是不可变数据类型,没有增删改查,可以存储任意数据类型
元组的创建
- 定义一个空的元组
t=()
print(t,type(t))
输出结果:
() <class 'tuple'>
- 定义一个非空元组
t = (1,1.2,True,'python')
print(t,type(t))
输出结果:
(1, 1.2, True, 'python') <class 'tuple'>
() <class 'tuple'>
- 元组如果只有一个元素,后面一定要加逗号,否则数据类型不确定
t4 = (1)
print(t4,type(t4))
输出结果:
1 <class 'int'>
t4 = (1,)
print(t4,type(t4))
输出结果:
(1,) <class 'tuple'>
- 元组本是不可变数据类型,但是 如果元组里面包含可变数据类型,可以间接修改元组内容
t1 = ([1,2,3],4)
t1[0].append(4)
print(t1)
输出结果:
([1, 2, 3, 4], 4)
t2 = ()
print(t2)
t3 = tuple([])
print(t3)
l4 = list(())
print(l4)
输出结果:
()
()
[]
元组的特性
tuple = (1,1.0,True,‘westos’)
- 索引
print(tuple[0])
print(tuple[-1])
输出结果:
1
westos
- 切片
print(tuple[1:])
print(tuple[:-1])
print(tuple[::-1])
输出结果:
(1.0, True, 'westos')
(1, 1.0, True)
('westos', True, 1.0, 1)
- 连接
除了数值类型之外,不同的数据类型之间不可以连接
print(tuple + (1,2,3))
输出结果:
(1, 1.0, True, 'westos', 1, 2, 3)
print(tuple + [4,5,6])
输出结果:
Traceback (most recent call last):
File "/home/kiosk/PycharmProjects/python/DataType/元组.py", line 30, in <module>
print(tuple + [4,5,6])
TypeError: can only concatenate tuple (not "list") to tuple
报错了
- 重复
print(tuple * 5)
输出结果:
(1, 1.0, True, 'westos', 1, 1.0, True, 'westos', 1, 1.0, True, 'westos', 1, 1.0, True, 'westos', 1, 1.0, True, 'westos')
- for循环
for i in tuple:
print(i)
输出结果:
1
1.0
True
westos
- 成员操作符
print(1 in tuple)
print(i not in tuple)
输出结果:
True
False
元组的常用方法
t = (1,2,'a','c','a')
- 查看元素的索引值
print(t.index('c')) # 3
- 查看元素在元组中出现的次数
print(t.count('a')) # 2
元组的应用场景
1.变量交换数值
# 1.变量交换数值
a = 1
b = 2
b,a = a,b
"""
b,a = a,b就相当于干了下面3件事
1.先把(a,b)封装成了一个元组 (1,2)
2. b,a = a,b ===> b,a = (1,2)
3. b = (1,2)[0] a =(1,2)[1]
"""
print(a,b) #2 1
2.打印变量值
name = 'westos'
age = 11
t = (name,age)
print('name:%s,age:%d' %(name,age))
print('name:%s,age:%d' %t)
输出结果:
name:westos,age:11
name:westos,age:11
3.元组的赋值
有多少个元素,就用多少个变量接收
t = ('Westos',10,100)
name,age,score = t
print(name,age,score)
输出:
Westos 10 100
4. 元组的排序
scores = (100,89,45,78,65)
scores_sort = sorted(scores)
print(scores_sort)
输出:
[45, 65, 78, 89, 100]
元组的小例子
- 实现计分功能
去掉一个最高分,去掉一个最低分,剩下的相加除以个数
scores = (100,89,98,60,90,67)
scores = sorted(scores)
# python2中*middle不能使用的
min_score,*middle,max_score = scores # middle
print(min_score,'~~~~',*middle, '~~~~~~',max_score)
print(type(min_score),type(middle),type(max_score))
print('最终成绩为:%s' %(sum(middle)/4))
输出:
60 ~~~~ 67 89 90 98 ~~~~~~ 100
<class 'int'> <class 'list'> <class 'int'>
最终成绩为:86.0