本系列为自己学习Python的笔记,如有误,欢迎大家指正
元祖tuple
列表属于可变序列,可以任意自古列表中的元素,元素属于不可变序列,不能修改元祖中的元素,因此,元祖没有增加元素、修改元素、删除元素等相关的方法。
元祖支持如下操作:
- 索引访问
- 切片操作
- 连接操作
- 成员关系操作
- 比较运算操作
- 计数:元祖长度len() 最大值max() 最小值min() 求和sum()
元祖的创建
-
通过()创建元祖,小括号可以省略
a = (10,20,30) 或者 a = 10,20,30
如果元祖只有一个元素,则必须后面加逗号,这是因为解释器会把(1)解释为整数1 (1,)解释为元祖。
a = (1,) type(a)
-
通过tuple()创建
tuple(可迭代的对象)
a = tuple() b = tuple("a,b,c") c = tuple([2,3,4]) d = tuple(range(3))
总结:tuple()可以接收列表、字符串、其他序列类型、迭代器生成元祖。
list()可以接收元祖、字符串、其他序列类型、迭代器等生成列表
元祖的元素访问和计数
-
元祖的元素不能修改
a = (10,20,30,40) a[3] = 15 #报错 TypeError
-
元祖的元素访问和列表一样,只不过返回的仍然是元祖对象
a = (10,20,30) a[1] a[0:2]
-
列表关于排序的方法list.sorted()是修改原列表对象,元祖没有该方法,如果要对元祖排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象
zip
zip(列表1,列表2…)将多个列表对应的位置的元素组合成为元祖,并返回这个zip对象。
a = [10,20,30]
b = [40,50,60]
c = [70,80,90]
d = zip(a,b,c)
list(d)#[(10,40,70),(20,50,80),(30,60,90)]
生成器推导式创建元祖
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号,列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元祖,而是一个生成器对象。
我们可以通过生成器对象,转换成列表或者元祖,也可以使用生成器对象的__next__()
方法进行遍历,或者直接作为迭代器对象来使用。不管什么方法,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该元素的生成器对象。
s = (x*2 for x in range(5))#迭代器对象
s
tuple