04-04 基本数据类型之元组类型及其内置方法

一、作用

  • 元组就是不可变的列表。按照索引位置存放多个值,只能读,不能改。
  • 在同等数据类型下,使用元组更加节简空间,效率要高于列表,因为元组底层只提供读的机制,而列表即要有读的机制,还要有改的机制。虽然这种效率的问题影响不太,但是本着效率更高的态度,我们这个时候就应该用元组类型。

二、定义

  • 定义:()内用逗号分隔开多个任意类型的元素。
  • 定义需注意: 单独一个括号,只代表包含的意思。如果你定义的元组中,只有一个元素,必须用逗号分隔开。
  • 元组的不可变到底是什么不可变?元组不可变,指的是第一层元素的内存地址,不能被改变。如果第一层嵌套了可变的容器类型,例如:列表。那么这个列表本身容器地址不可改变,而该列表中的值可以被改变。
# 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
posted @ 2020-03-11 16:50  给你加马桶唱疏通  阅读(304)  评论(0编辑  收藏  举报