3.3 Python 元组类型常用操作及内置方法

2022-11-13_01497

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'>

2022-11-11_01405

(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

2022-11-11_01407

* 元组不支持修改元素是因为Tuple的类中没有设置__setitem__属性.

2022-11-11_01406

* 元组不可变是指当前变量存放的元素不可变, 
  如果定义的元组最外层变量包含可变类型元素,那么这个元组是可变的。
t1 = (1, [1, 2])
print(t1)  # (1, [1, 2])

# 元素内部的元素类型是可变类型的话支持修改.
t1[1][0] = 0
t1[1][1] = 'a'
print(t1)  # (1, [0, 'a'])

2022-11-11_01408

意外类型:(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是为了避免文章提示质量低.


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值