元组是不可以改变的序列,如果元组的元素包含列表、字典是支持修改操作的。
因为不可变所以元素的修改会报错:
>>> tt=(3,4,5)
>>> type(tt)
<type 'tuple'>
>>> tt[2]=4
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: ‘tuple’ object does not support item assignment(#元素修改报错)
(一)元组
(1)定义元组: 创建一个元组并给他赋值实际上跟创建一个列表并给它赋值完全一样,除了一点,只有一个元素的元组需要在元组分割符里面加一个逗号(,)用以防止跟普通的分组操作符混淆.不要忘了它是一个工厂方法
>>> a=()
>>> a=(1,) #如果不加,就表示a=(1)等价于1
>>> a
(1,)
>>> a=2,3
>>> type(a)
<type 'tuple'>
>>> a
(2, 3)
>>> tuple("bar") #工厂方法定义无组
('b', 'a', 'r')
>>> def f(): #函数的返回值是一个元组
>>> return 2,3
>>> f()
(2, 3)
元组的成员:包括字典、列表、数字、字符:
>>> tuple22=(None,5,6,6,'ab',[1,2,3])
>>> a=(1,2,"a",["b",3],{1:2})
>>> type(a)
<type 'tuple'>
>>> for i in a:
... print i
...
1
2
a
['b', 3]
{1: 2}
>>> a[3][0]="x"
>>> print a
(1, 2, 'a', ['x', 3], {1: 2})
>>> a[4][1]="x"
>>> print a
(1, 2, 'a', ['x', 3], {1: 'x'})
(2)访问元组:元组的切片操作跟列表一样,用方括号作为切片操符([]),里面写上索引值或者索引范围.
>>> aTuple = (123, 'abc', 4.56, ['inner', 'tuple'], 7-9j)
>>> aTuple[1:4]
('abc', 4.56, ['inner', 'tuple'])
>>> aTuple[:3]
(123, 'abc', 4.56)
>>> aTuple[3][1]
'tuple'
(3)更新元组:
跟数字和字符串一样,元组也是不可变类型,就是说你不能更新或者改变元组的元素,我们是通过现有字符串的片段再构造一个新字符串的方式解决的,对元组同样需要这样.
>>> aTuple = aTuple[0], aTuple[1], aTuple[-1]
>>> aTuple
(123, 'abc', (7-9j))
>>> tup1=(12,34.56)
>>> tup2=("abc","xyz")
>>> tup3=tup1+tup2
>>> tup3
(12, 34.56, 'abc', 'xyz')
(4)元组的删除:删除一个单独的元组元素是不可能的,删除一整个元组是可以的。
>>> a=(1,[2,3],{4:5,5:6})
>>> del a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> del a[1][1]
>>> print a
(1, [2], {4: 5, 5: 6})
>>> del a[2][4]
>>> print a
(1, [2], {5: 6})
(二)元组:标准类型操作符,序列类型操作符和内建函数
(1)创建,重复,连接操作
>>> t = (['xyz', 123], 23, -103.4)
>>> t
(['xyz', 123], 23, -103.4)
>>> t*2
(['xyz', 123], 23, -103.4, ['xyz', 123], 23, -103.4)
>>> t=t+("free","easy")
>>> t
(['xyz', 123], 23, -103.4, 'free', 'easy')
(2)成员关系操作,切片操作
>>> 23 in t
True
>>> 123 in t
False
>>> t[0][1]
123
>>> t[1:]
(23, -103.4, 'free', 'easy')
(3)内建函数
>>> str(t)
"(['xyz', 123], 23, -103.4, 'free', 'easy')"
>>> len(t)
5
>>> max(t)
'free'
>>> min(t)
-103.4
>>> cmp(t,(['xyz', 123], 23, -103.4, 'free', 'easy'))
0
>>> list(t)
[['xyz', 123], 23, -103.4, 'free', 'easy']
(4)操作符
>>> (4,2)<(3,5)
False
>>> (2,4)<(3,-1)
True
>>> (2,4)==(3,-1)
False
>>> (2,4)==(2,4)
True
(三)元组类型操作符和内建函数,内建方法:元组的特殊性
(1)所有的多对象的,逗号分隔的,没有明确用符号定义的,比如说像用方括号表示列表和用圆括号表示元组一样,等等这些集合默认的类型都是元组:
>>> 'abc', -4.24e93, 18+6.6j, 'xyz'
('abc', -4.24e+93, (18+6.6j), 'xyz')
>>> x,y=1,2
>>> x,y
(1, 2)
所有函数返回的多对象(不包括有符号封装的)都是元组类型。注意,有符号封装的多对象集合其实是返回的一个单一的容器对象:
>>> def foo(x,y):
... return x,y
>>> foo(4,5)
(4, 5)
>>> def foo1(x,y):
... return (x,y)
>>> foo1(5,6)
(5, 6)
(2)作为字典的关键字
不可变对象的值是不可改变的。这就意味着它们通过 hash 算法得到的值总是一个值。这是作为字典键值的一个必备条件。
>>> dic={(3,4):"welcome","a":333}
>>> dic
{'a': 333, (3, 4): 'welcome'}