(一)初识元组tuple
Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的元素。
因此,元组没有增加元素、修改元素、删除元素相关的方法。 我们只需学元组的创建和删除,元素的访问和计数即可。元组支持如下操作:
(二)元组的创建
通过()创建元组。
小括号可以省略。a = (10,20,30) 或者 a = 10,20,30
如果元组只有一个元素,则必须后面加逗号。这是因为解释 器会把(1)
解释为整数
1
,
(1,)
解释为元组。 如
a = 10,表示元组,而a=10,表示整数10。
具体代码:
a = (10)
print(type(a))#<class 'int'>
a = (10,) #或者 a = 1,
print(type(a))#<class 'tuple'>
通过tuple()创建元组 tuple(可迭代的对象)
a = tuple() #创建一个空元组对象
b = tuple("abc")
c = tuple(range(3))
d = tuple([2,3,4])
总结:
-
tuple()可以接收列表、字符串、其他序列类型、迭代器等生成元组。
-
list()可以接收元组、字符串、其他序列类型、迭代器等生成列表。
(三)元组的元素访问和计数
元组的元素不能修改
元组的元素访问、index()、count()、切片等操作,和列表一样。
a = (20,10,30,9,8)
print(a[1])#10
print(a[1:3])#(10, 30)
print(a[:4])#(20, 10, 30, 9)
列表关于排序的方法
list.sorted()
是修改原列表对象,元组没有该方法。如果要对元组排序,只能使用内置函数 sorted(tupleObj),并生成新的列表对象。
a = (20,10,30,9,8)
b = sorted(a) #b是新对象,内容是:[8, 9,10, 20, 30]
zip
zip(
列表
1
,列表
2
,
...)
将多个列表对应位置的元素组合成为元组, 并返回这个zip
对象。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
a = [10,20,30]
b = [40,50,60]
c = [70,80,90,100]
d = zip(a,b,c)
print(d) #zip object
e = list(d) #列表:[(10, 40, 70), (20, 50,80), (30, 60, 90)]
print(e)
生成器推导式创建元组
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。
列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。
我们可以通过生成器对象,转化成列表或者元组。也可以使用生成器对象的
__next__()
方法进行遍 历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
生成器的使用测试
#列表推导式: [0, 2, 4, 6, 8]
#a = [x*2 for x in range(5)]
#print(a)
s = (x*2 for x in range(5))
print(s) #<generator object <genexpr> at0x0000021C80BE2880>
b = tuple(s)
print(b) #(0, 2, 4, 6, 8)
c = tuple(s)
print(c) #()
s2 = (x for x in range(3))
print(s2.__next__()) #0
print(s2.__next__()) #1
print(s2.__next__()) #2
#print(s2.__next__()) #报错:
StopIteration
(四)修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,具体代码如下:
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
# 创建一个新的元组
tup3 = tup1 + tup2
print tup3
(五) 无关闭分隔符
任意无符号的对象,以逗号隔开,默认为元组,如下实例:
(六)元组运算符
与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接 |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print x, | 1 2 3 | 迭代 |
(七)元组内置函数
Python元组包含了以下内置函数
方法 | 及描述 |
---|---|
cmp(tuple1,tuple2) | 比较两个元组元素。 |
len(tuple) | 计算元组元素个数。 |
max(tuple) | 返回元组中元素最大值。 |
min(tuple) | 返回元组中元素最小值。 |
tuple() | tuple(seq) 将列表转换为元组。 |
元组的核心特点是:不可变序列。
2
元组的访问和处理速度比列表快。
3
与整数和字符串一样,元组可以作为字典的键,列表则永远不能作为字典的键使用。