元组 tuple
元组是不可改变的序列,同 list 一样,元组可以存放任意类型的元素,一但元组生成,则它不可以改变。
tuple 与 list 不同,没有 append(), pop(), insert() 这些方法可以使用。获取元素的方法和 list 是一样的,可以通过索引来访问(也是从0开始的),只不过不能赋值成为其他的元素。
因为 tuple 不可变,所以代码更安全。如果可以的话,我们尽量使用 tuple 代替 list
创建元组
用小括号 () 括起来,单个元素括起来用逗号 (,) 区分是单个对象还是元组
注意:
创建只有1个元素的元组时,需要加一个逗号,来消除歧义,否则定义的就不是一个元组而是元素本身
# 定义一个空的tuple
t = ()
# 创建只有1个元素的元组
t1 = (1) # t1 = 1
t2 = (1,) # t2 = (5,)
t3 = 1, # t3 = (1,)
type(t1) # <class 'int'>
type(t2) # <class 'tuple'>
type(t3) # <class 'tuple'>
# 创建包含多个元素的元组
t4 = (1,2,3)
t5 = 100, 200, 300
t6 = 'a','b','c','d'
t7 = 'a','b','c','d',100,200
删除元组
元组中的元素不能被删除,但是我们可以使用 del 删除整个元组,删除后可以重新定义
访问元组
规则与列表完全相同,但由于元组是不可变对象,所以不支持索引赋值和切片赋值
索引取值
-
切片取值
tup1 = (1, 2, 3, 4, 5 ) tup2 = "a", "b", "c", "d" print(tup1[0]) # 2 print(tup2[1:3]) # (b,c) print(tup2[::-1]) # ('d','c','b','a')
元组的构造函数 tuple()
tuple()生成一个空的元组,等同于()-
tuple(iterable)用可迭代对象生成一个元组t1 = tuple() t2 = tuple(range(10)) t3 = tuple('hello') t4 = tuple([1,2,3,4])
元组的算术运算
与列表完全相同
元组的比较运算符
与列表完全相同
in/not in
规则与列表完全相同
序列函数
规则与列表完全相同
len, max, min, sum, all, any
注意点
test=('a','b',[1,2,3])
print(test) # test = ('a', 'b', [1, 2, 3])
test[2][0]=100
print(test) # test = ('a', 'b', [100, 2, 3])
说明:
tuple 不可变指的是指向不变,也就是说 test[2] 永远指向 List[1,2,3],这里是因为 List 可变,所以我们才能修改为 [100,2,3] ,但是改变前后test[2] 的指向没有发生任何变化
元组的解包
t = ('foo', 'bar', 'baz', 'qux')
(s1, s2, s3, s4) = t
print(s1,s2,s3,s4) # foo bar baz qux
(s1, s2, s3) = t # 报错
注意点:解包一个元祖是传递的变量和元组实际元素数量不相符时会产生错误
元组的常用方法
tup.index(x, [start, [stop]]))返回元组中start到stop索引中第一个值为x的元素在整个列表中的索引。如果没有匹配的元素就会返回一个错误。tup.count(x)返回x在元组中出现的次数。cmp(tuple1, tuple2)比较元组中两个元素。len(tuple)计算元组元素个数。max(tuple)返回元组中元素最大值。min(tuple)返回元组中元素最小值。tuple(seq)将列表转换为元组。
元组不提供字符串、列表和字典中的方法。如果相对元组排序,通常先得将它转换为列表并使其成为一个可变对象,才能获得使用排序方法,或使用sorted内置方法。
tup = (1,2,3,4,5,6,7,9,10)
tup1 = tup.index(5) # 4
tup2 = tup.index(5,1,5) # 4
tup3 = tup.index(5,5,7) # 报错
res = tup.count(5) # 1
res1 = tup.count(11) # 0
tup4 = tuple(list('123')) # '1','2',''3
tup5 = tuple('ABCD') # 'A','B','C','D'
其他函数
reversed(seq)返回反向顺序的可迭代对象-
sorted(iterable, reverse=False)返回一个新的已排序列表reverse = False表示按从小到大排列,默认值reverse = True表示按从大到小排列
注意:对元组使用 sorted 方法后返回列表类型
for x in reversed("ABCD"):
print(x) # D C B A
L = [8, 6, 3, 5, 7]
L2 = sorted(L)
print(L2) # [3, 5, 6, 7, 8]
L3 = sorted(L, reversed=True)
print(L3) # [8, 7, 6, 5, 3]
print(L) # 保持不变