文章目录
1. Tuple 元组
1.1 元组
特征: 使用小括号括起来, 内部可以存放多个数据, 元素与元素之间用逗号隔开, 元素可以是任意数据类型.
元组与列表类似, 不同之处在于元组的元素不能修改, 元素内部的元素类型是可变类型的话支持修改.
* 元组只有一个元素的时候元素后面加上一个逗号, 否则就不是元组, 而是整型.
* 推荐所有容器类型, 无论内部有几个元素, 末尾要加上逗号, 尤其是只有一个值得时候.
变量名 = (元素1,)
变量名 = (元素1, 元素2, ···)
省略括号写法:
变量名 = 元素1,
变量名 = 元素1, 元素2, ···
# 空元组
t1 = ()
print(t1, type(t1)) # () <class 'tuple'>
# 元组只有一个值得时候在值得后面加上逗号,
t2 = (1,)
print(t2, type(t2)) # (1,) <class 'tuple'>
# 一个int的数据类型, 加上括号, 括号被省略, 那还是整型.
t3 = (1)
print(t3, type(t3)) # 1 <class 'int'>
# 省略写法
t4 = 1,
print(t4, type(t4)) # (1,) <class 'tuple'>
t5 = 1, 2, 3
print(t5, type(t5)) # (1, 2, 3) <class 'tuple'>
(1) 是一个整型, 整型加厉害就多余了, 所以提示: 移除冗余的圆括号.
1.2 获取元素
元组和元组一样可以按索引取值.
格式:变量[索引]
嵌套格式: 变量[索引][索引]···
t1 = (1, ['a', 'b'])
print(t1[0]) # 1
print(t1[1][0]) # a
1.3 修改元素
t1 = (5,)
# 元组修改值
t1[0] = 1
运行工具窗口显示:
Traceback (most recent call last):
File "C:\Users\13600\PycharmProjects\test\test.py", line 3, in <module>
t1[0] = 1
# 类型错误:“tuple”对象不支持项分配
TypeError: 'tuple' object does not support item assignment
* 元组不支持修改元素是因为Tuple的类中没有设置__setitem__属性.
* 元组不可变是指当前变量存放的元素不可变,
如果定义的元组最外层变量包含可变类型元素,那么这个元组是可变的。
t1 = (1, [1, 2])
print(t1) # (1, [1, 2])
# 元素内部的元素类型是可变类型的话支持修改.
t1[1][0] = 0
t1[1][1] = 'a'
print(t1) # (1, [0, 'a'])
意外类型:(int, int)可能的类型:(SupportsIndex, list[int])(slice, Iterable[list[int]])
列表在作为一个容器类型的元素时, 列表自身的元素是同一个类型的话, Pycharm 会认为列表该该类型列表,
对列队元素修改是, 期待该元素的新值也是该类型, 否则会提示警告. 这个警告可以忽略.
元素的类型不都是一样的话就不会出现提示.
2. 类型转换
能被for循环遍历的都可以转换为元组类型.
str1 = tuple('hello world!')
list1 = tuple(['a', 'b', 'c'])
dic1 = tuple({'k1': 'v1', 'k2': 'v2'})
set1 = tuple((1, 2, 3))
print(tuple(str1), type(str1))
print(tuple(list1), type(str1))
print(tuple(dic1), type(dic1))
print(tuple(set1), type(set1))
运行工具窗口显示:
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!') <class 'tuple'>
('a', 'b', 'c') <class 'tuple'>
('k1', 'k2') <class 'tuple'>
(1, 2, 3) <class 'tuple'>
3. 索引取值与切片
索引取值: 取一个元素.
列表中每个元素占一个索引, 索引从0开始.
切片取值: 取多个元素.
取值格式: 字符串[start: stop: step]
start 起始值参数: 起始位置, 从第几位开始取值.
stop 上限值参数: 上限的位置, 只能获取到它的前一索引的值, 不包含它本身.
step 步长参数: 从左往右正向取值, 步长是负数从右往左反向取值(start 与 stop 参数对换).
省略索引:
省略第一个参数: 默认参数为0, 从索引0开始截取.
省略第二个参数: 默认惨为列表的长度, 意味着切片直至列表的末尾.
省略第三个参数: 默认为1, 从左往右正向取值.
tuple1 = (1, 2, 3, 4, [1, 2])
# 取第一个值
print(tuple1[0]) # 1
# 取第一个个第二个值
print(tuple1[0:2]) # (1, 2)
# 取最后一个值
print(tuple1[-1]) # [1, 2]
# 全取
print(tuple1[:]) # (1, 2, 3, 4, [1, 2])
# 倒退 全取
print(tuple1[::-1]) # ([1, 2], 4, 3, 2, 1)
# 嵌套取值
print(tuple1[4][1]) # 2
4. 遍历元组
for 循环语句可以依次获取元组的元素.
t1 = (1, 2, 3, 4, [1, 2])
for i in t1:
print(i)
运行工具窗口显示:
1
2
3
4
[1, 2]
5. 获取长度
len() 函数可以获取元组的元素个数.
tuple1 = (1, 2, 3, 4, [1, 2])
print(len(tuple1)) # 5
6. 拼接与复制
符号 | 作用 | 示例 |
---|---|---|
+ 加号 | 拼接元组. | (1, ) + (2, ) = (1, 2) |
* 乘号 | 复制元组元素. | (1, ) * 2 = (1, 1) |
Python 属于强类型语言, 不能类型的数据是无法互相操作的.
Python 中为了方便程序员的使用:
使用+号, 让元组与元组将加时, 表示拼接元组(末尾添加).
使用*号, 让元组与整型将乘时, 使其不再表示乘法, 而是复制n次元素.
6.1 元组的拼接
t1 = (1, )
print(t1 + (2, )) # (1, 2)
t1 += (2, )
print(t1) # (1, 2)
6.2 元组元素复制
t1 = (1, )
print(t1 * 2) # (1, 1)
t1 *= 2
print(t1) # (1, 1)
7. 成员运算
in 判断某个个体是否在某个群体当中, 返回布尔值.
not in 判断某个个体是否不在某个群体当中, 返回布尔值.
t1 = (1, 2)
print(1 in t1) # True
print(2 not in t1) # False
8. 统计元素
.count() 方法: 统计指定元素的个数.
tuple1 = (1, 1, 1, 4, [5, 6])
print(tuple1.count(1)) # 3
9. 获取索引
.index() 方法: 从左往右查找指定元素,查到就立刻返回索引,元素不存在则报错.
报错信息:ValueError: tuple.index(x): x not in tuple
tuple1 = (1, 2, 3, 4, [5, 6])
print(tuple1.index(1)) # 0
10. 练习
1. 什么是元组?它用在何处?
2. 元组不可变指的是元组内的什么不可改变?
3. t = (1,2,['AA']) ,针对改元组能够把'aa'改成'AA',这与元组不可变是否冲突?
文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.