一、作用
- 元组就是不可变的列表。按照索引位置存放多个值,只能读,不能改。
- 在同等数据类型下,使用元组更加节简空间,效率要高于列表,因为元组底层只提供读的机制,而列表即要有读的机制,还要有改的机制。虽然这种效率的问题影响不太,但是本着效率更高的态度,我们这个时候就应该用元组类型。
二、定义
- 定义:()内用逗号分隔开多个任意类型的元素。
- 定义需注意: 单独一个括号,只代表包含的意思。如果你定义的元组中,只有一个元素,必须用逗号分隔开。
- 元组的不可变到底是什么不可变?元组不可变,指的是第一层元素的内存地址,不能被改变。如果第一层嵌套了可变的容器类型,例如:列表。那么这个列表本身容器地址不可改变,而该列表中的值可以被改变。
# 1、定义
t = (1, 1.3, 'aa') # t=tuple((1,1.3,'aa'))
print(t, type(t))
# 2、定义注意:单独一个括号代表包含的意思
x = (10)
print(x, type(x))
# 3、单个值的定义:如果元组中只有一个元素,必须加逗号
t = (10,)
print(t, type(t))
# 4、元组的不可变到底是什么不可变
# 4.1 元组不可变,指的是第一层内元素的内存地址,不能被改变
t = (1, 1.3, 'aa') # t=(0->值1的内存地址,1->值1.3的内存地址,2->值'aa'的内存地址,)
# t[0] = 11111
# 4.2 如果第一层内嵌套了可变的容器类型,例如:列表。那么这个列表本身容器地址不可改变,而该列表中的值可以被改变。
t = (1, [11, 22]) # t=(0->值1的内存地址,1->值[11,22]的内存地址,)
print(id(t[0]), id(t[1]), id(t[1][0])) # 140703318001312 3142440721856 140703318001632
# t[0]=111111111 # 不能改
# t[1]=222222222 # 不能改
t[1][0] = 11111111111111111 # 可以改
print(t) # (1, [11111111111111111, 22]),元组中的列表的第一个值发生了改变
print(id(t[0]), id(t[1]), id(t[1][0])) # 140703318001312 3142440721856 3142440159792(该id发生了改变)
三、类型转换
- 强调:字符串、列表、字典都可以转元组。
- 注意:字典转元组,字典在没有任何的附加条件的时候,字典所有的key,会被转成元组的没一个元素。
# 字符串转元组
print(tuple('hello')) # ('h', 'e', 'l', 'l', 'o')
# 列表转元组
print(tuple([1, 2, 3])) # (1, 2, 3)
# 字典转元组
print(tuple({'a1': 111, 'a2': 333})) # ('a1', 'a2')
三、使用:内置方法
👇优先掌握的操作👇
1、按照索引取值(正向取+反向取):只能取
t = ('aa', 'bbb', 'cc', 'dd', 'eee')
# 正向取
print(t[0]) # aa
# 反向取
print(t[-1]) # eee
2、切片(顾头不顾尾)
t = ('aa', 'bbb', 'cc')
# 顾头不顾尾
print(t[0:3]) # ('aa', 'bbb', 'cc')
# 反向步长:浅拷贝+颠倒元组中的元素
new_t = t[::-1]
print(new_t) # ('cc', 'bbb', 'aa')
print(id(new_t), id(t)) # 2395084069184 2395083889664
3、长度len
t = ('aa', 'bbb', 'cc', 'dd', 'eee')
print(len(t)) # 5
4、成员运算int和not in
t = ('aa', 'bbb', 'cc', 'dd', 'eee')
print('aa' in t) # True
9、循环
t = ('aa', 'bbb', 'cc', 'dd', 'eee')
for x in t:
print(x)
'''
bbb
cc
dd
eee
'''
👇需要掌握的操作👇
1、count
- count 统计元素在元组中的个数。只传1个任意类型的值,统计该值在元组中的个数。
t = ('aa', 'bbb', 'aa', 'dd', 'eee')
print(t.count('aa')) # 2
2、index
- index 按照先后顺序统计对应值的索引。(注意:先后顺序指的是从左到右的顺序,找到了就返回索引值)
- 注意:元组没有字符串的这些方法find、rfind、rindex
t = ('aa', 'bbb', 'aa', 'dd', 'eee')
print(t.index('aa')) # 0