Python 的核心数据类型:元组

元组是Python中的不可变序列,类似于不可变的列表。它支持序列操作,如通过偏移量存取,但不支持原位置修改。元组可任意嵌套,但一旦创建就不能增长或缩短。尽管列表更灵活,但元组的不可变性提供了一致性,确保其内容不会被意外修改。元组的创建需注意单元素元组需尾随逗号。元组虽不可变,但支持通过“+”、“*”及分片创建新元组。在需要不变性或优化性能时,元组是理想选择。

元组对象(tuple),像一个不可改变的列表。元组是序列,但是具有不可变性,和字符串类似。

语法上,它被编写在圆括号()中而不是方括号[]中,它们支持任何类型、任意嵌套以及常见的序列操作。

元组的特点:

任意对象的有序集合

        与字符串 和列表类似,元组是一个基于位置的有序对象集合。与列表相同,它们可以嵌进任何类型的对象。

通过偏移量存取

        同字符串、列表一样,元组中的元素通过偏移量来访问,例如索引和分片。

属于“不可变序列”

        元组不支持适用于列表的任何原位置修改操作。

固定长度、多样性、任意嵌套

        因不可变性,如不创造一个新的副本,就不能增长或缩短元组。

常见元组字面量和运算

运算     解释
()空元组
A = (0,)单个元素的元组
A = (0, 'Ni', 1.2, 3)四个元素的元组
A = 0, 'Ni', 1.2, 3与上相同
A = ('bob', ('dev', 'mgr'))嵌套元组
A = tuple('spam')一个可迭代对象的元素组成的元组
A[i]索引
A[i][j]索引的索引
A[i:j]分片
len(A)长度
A1 + A2拼接
A*2重复
for x in A: print(x)迭代
"spam" in A成员关系
[x ** 2 for x in A]列表推导
A.index('he')search()方法
A.count('he')count()方法

元组的实际应用

T = (1,2,3,4)
len(T)
# 4

T + (5,6)
# (1,2,3,4,5,6)

T[0]
# 1

元组两个专有的可调用方法

T.index(4)
# 3

T.count(4)
# 1

元组的真正特殊之处在于一旦创建就不能改变,只含一个元素的元组需要一个逗号作为结尾。

T[0] = 2
...error text omitted...
TypeError:'tuuple' object does not support item assignment

T = (2,) + t[1:]
T
(2,2,3,4)

与列表和字典一样,元组支持混合的类型和嵌套,但是不能增长或缩短,因为他们是不可改变的:

T = 'spam', 3.0, [11,22,33]
T[1]
3.0

T[2][1]
22

T.append(4)
AttributeError: 'Tuple' object has no attribute 'append'

(1, 2) + (3, 4)
#(1, 2, 3, 4))

(1, 2)* 3
#(1, 2, 1, 2, 1, 2)

A = (1, 2, 3, 4)
A[0], A[1:3]
#(1, (2, 3))

当“+” “*” 以及分片操作应用于元组时,返回新的元组对象。

append调用在元组中不可用

元组排序:先将它转换为列表从而使其成为一个可变对象,才能使用排序方法调用。

A = ('cc', 'aa', 'dd', 'bb')
tmp = list(A)
tmp.sort()
tmp
#['aa', 'bb', 'cc', 'dd']
A = tuple(tmp)
A
#('aa', 'bb', 'cc', 'dd')

sorted(A)
#('aa', 'bb', 'cc', 'dd')

#
list将对象转换成列表 
tuple将对象转换成元组

注意:元组的不可变性只使用于元组本身顶层,而非其内容。

A = (1, [2, 3], 4)
A[1] = 'spam'
#TypeError: object doesn't support item assignment

A[1][0] = 'spam'
A
#(1, ['spam', 3], 4)

为什么有了列表还要元组?

最佳答案是元组的不可变性提供了某种一致性。这样可以确保元组在程序中不会被另一个引用修改,而列表就没有这样的保证。

元组对象基本就像一个不可以改变的列表。就像列表一样,元组是序列,但是它具有不可变性,和字符串类似。语法上,元组被编写在圆括号中而不是方括号中(圆括号可以省略),它们支持任意类型、任意嵌套以及常见的序列操作。

T = (1,2,3,4)
len(T)
# 4

T + (5,6)
# (1,2,3,4,5,6)

T[0]
# 1

元组两个专有的可调用方法

T.index(4)
# 3

T.count(4)
# 1

元组的真正特殊之处在于一旦创建就不能改变,只含一个元素的元组需要一个逗号作为结尾。

T[0] = 2
...error text omitted...
TypeError:'tuuple' object does not support item assignment

T = (2,) + t[1:]
T
(2,2,3,4)

与列表和字典一样,元组支持混合的类型和嵌套,但是不能增长或缩短,因为他们是不可改变的:

T = 'spam', 3.0, [11,22,33]
T[1]
3.0

T[2][1]
22

T.append(4)
AttributeError: 'Tuple' object has no attribute 'append'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值