序列之三:元组(Python)
元组和列表是非常相近的。在外观上,元组使用(,),而列表使用[]。在功能上,元组不可变,列表可变。
基本操作
创建元组
创建一个元素的元组,需要在元组分割符里面加一个(,),以防止跟普通的分组操作符混淆。
>>> (1)
1
>>> (1,)
(1,)
>>> (1,2,)
(1, 2)
>>> tuple(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> tuple([1])
(1,)
访问元组
>>> aTuple=(123,'abc',['inner','peace'],(7-9j))
>>> aTuple
(123, 'abc', ['inner', 'peace'], (7-9j))
>>> aTuple[1:3]
('abc', ['inner', 'peace'])
>>> aTuple[3:]
((7-9j),)
>>> aTuple[2][1]
'peace'
更新元组
同数字和字符串,元组是不可变类型。不能更新或者改变元组的元素。元组的更新通过现有的元组构造一个新的元组来实现。
>>> t1=(1,)
>>> t2=('a',)
>>> t3 = t1 + t2
>>> t3
(1, 'a')
操作符 + * in
>>> t1
(1,)
>>> t2
('a',)
>>> t3 = t1*3 + t2*2
>>> t3
(1, 1, 1, 'a', 'a')
>>> 1 in t3
True
>>> (1,1) in t3
False
>>> t1 < t3
True
>>> t1 > t3
False
>>> t3 == t3
True
元组的不变性
>>> aTuple
(123, 'abc', ['inner', 'peace'], (7-9j))
>>> id(aTuple)
4304734176
>>> aTuple[0]
123
>>> aTuple[0]=456
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> aTuple[2]=456
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> aTuple[2][0]=456
>>> aTuple
(123, 'abc', [456, 'peace'], (7-9j))
>>> id(aTuple)
4304734176
所有的多对象的,逗号分割的,没有明确用符号定义的,这些集合默认为元组类型。
>>> 1,'abc',[1,2,]
(1, 'abc', [1, 2])
>>> x,y=1,2
>>> x,y
(1, 2)
>>> x
1
>>> y
2