- 八、元组Tuple
- 1. 元组与列表
- 2. 元组不可变
- 3. 生成只有一个元素的元组
- 4. 打包和解包
- 5. 元组的变与不变
- 6. 转换为元组
- 7. count()
- 8. index()
C语言和Python经常弄混,尤其总是忍不住给Python后面加分号……干脆给自己做个笔记省的忘了。。。(小甲鱼那边的) 八、元组Tuple 1. 元组与列表
列表是方括号;元组是圆括号,也可以不带括号,同样是用下标(方括号)获取元素
>>> rhyme = (1,2,3,4,5,'上山打老虎') >>> rhyme (1, 2, 3, 4, 5, '上山打老虎') >>> rhyme = 1,2,3,4,5,'上山打老虎' >>> rhyme (1, 2, 3, 4, 5, '上山打老虎') >>> rhyme[0] '''使用方括号的下标获取元素,圆括号会报错''' 1 >>> rhyme[-1] '上山打老虎'2. 元组不可变
元组是不可变的,不能修改元组,在运行上tuple的性能是list的数倍;不过可以切片,因为切片并没有影响元组本身,用法与列表相同;在元组里面,只能支持“查”的功能;同样可以对元组进行加法和乘法。
>>> nums = (1,6,4,3,5,2,3,5,6,3,9,8,7,4,5) >>> nums.count(5) 3 >>> nums.index(4) 2 '''同样可以对元组进行加法和乘法''' >>> s = (1,2,3) >>> t = (4,5,6) >>> s + t (1, 2, 3, 4, 5, 6) >>> s * 3 (1, 2, 3, 1, 2, 3, 1, 2, 3) >>> w = s,t >>> w ((1, 2, 3), (4, 5, 6)) #嵌套元组 >>> [each * 2 for each in s] [2, 4, 6] '''列表推导式,但是没有元组推导式,这是一个列表'''3. 生成只有一个元素的元组
>>> x = (1) >>> type(x)>>> x = (1,) >>> type(x)
重点在于加一个逗号,原因是,在整数运算中,用()来表示优先级。而对于多个元素的tuple,则加和不加这个逗号,效果是一样的。
4. 打包和解包>>> t = (1, 'a', 2.1) #把整数、字符串、浮点数打包到了t里面 >>> x, y, z = t >>> x 1 >>> y 'a' >>> z 2.1 '''用x,y,z解包,也适用于任何的序列类型(列表、字符串)''' >>> x, y, z = 'boy' >>> x 'b' >>> y 'o' >>> z 'y' '''左右两侧数量需要一致,如果不一致:''' >>> x, *y, z = 'apple' #没添加*的就是对应一个变量,添加了*的是剩余所有变量 >>> x 'a' >>> y ['p', 'p', 'l'] >>> z 'e'
python有一个功能是多重赋值:
>>> x, y = 3, 5 >>> x 3 >>> y 5
其背后的逻辑就是先用元组打包,再将元组解包:
>>> _ = (3, 5) #_ 表示匿名变量 >>> x, y = _ >>> x 3 >>> y 55. 元组的变与不变
元组本身不可变,但是如果元组指向的是可变的列表,则可以变化
>>> x = ([1,2], [3,4]) >>> x[1][0] = 0 >>> x ([1, 2], [0, 4]) #但是如果用x[1] = [0, 4]来替换,就是改变元组,这会报错
tuplelist一个最大的不同点就是tuple是不可变的,tuple里面的元素,也是不可替换的。但是这针对的是仅包含基础数据类型(数字类型、布尔类型、字符串类型)的数据,对于组合数据类型,则不受这个约束。
6. 转换为元组元组数据类型可以把不是元组的容器转换为元组,比如将列表转换成元组
>>> L = ['wo', 32, '我']
>>> T = tuple(L)
>>> T
('wo', 32, '我')
反之:
>>> T = ('wo', 32, '我')
>>> L = list(T)
>>> L
['wo', 32, '我']
7. count()
count()方法用来统计tuple中某个元素出现的次数
T = (1, 1, 2, 2, 3, 3, 1, 3, 5, 7, 9) print(T.count(1)) # ==> 3 print(T.count(5)) # ==> 1
对于不存在的元素,count方法不会报错,而是返回0,这是合理的,因为元组里面有0个不存在的元素。
8. index()index()方法可以返回指定元素的下标,当一个元素多次重复出现时,则返回第一次出现的下标位置
T = (1, 1, 2, 2, 3, 3, 1, 3, 5, 7, 9) T.index(9) # ==> 10 T.index(5) # ==> 8 T.index(1) # ==> 0 # 多次出现,返回第一次出现的位置
注意,index()方法和count()方法不一样,当指定的元素不存在时,使用index()方法Python会报错。



