python元组

        另有一种有序列表叫元组(tuple)。元组和列表非常类似,但是元组一旦初始化就不能修改,

        元组是序列的一种。序列包括字符串、列表和元组。

1
>>> classmates = ('Michael', 'Bob', 'Tracy')

        现在,classmates这个元组不能变了,它没有append(),insert()这样的方法。其他获取元素的方法和列表是一样的classmates[0],classmates[-1],但不能赋值成另外的元素。

        因为元组不可变,所以代码更安全。如果可能,能用元组列表就尽量用元组。

        元组的陷阱:当定义一个元组时,在定义的时候,元组的元素就必须被确定下来。

1
2
3
>>> t = (1, 2)
>>> t
(1, 2)

        如果要定义一个空的元组,可以写成()

1
2
3
>>> t = ()
>>> t
()

        但是,要定义一个只有一个元素的元组。

1
2
3
>>> t = (1)
>>> t
1

        定义的不是元组,是1这个数!这是因为括号()既可以表示元组,又可以表示数学公式中的小括号,因此,python规定,这种情况下,按小括号进行计算,计算结果自然就是1

        所以只有一个元素的元组定义时必须加一个逗号,,来消除歧义

1
2
3
>>> t = (1,)
>>> t
(1,)

        python在显示只有一个元素的元组时,也会加一个逗号,,以免误解成数学计算意义上的括号。

        来看一个“可变的”元组

1
2
3
4
5
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

        这个元组定义的时候有3个元素,分别是a,b和一个列表。

        表面上看,元组的元素确实变量,但其实变的不是元组的元素,而是列表的元素。元组一开始指向的列表并没有改成别的列表,所以元组所谓的“不变”是说,元组的每个元素,指向永远不变。即指向a,就不能改成指向b,指向一个列表,就不能改成指向其他的对象,但指向的这个列表本身是可变的!

        理解了“指向不变”后,要创建一个内容也不变的元组就必须保证元组的每一个元素本身也不能变。

        python元组包含了以下内置函数

序号 方法及描述
1 cmp(tuple1, tuple2),比较两个元组元素。
2 len(tuple),计算元组元素个数。
3 max(tuple),返回元组中元素最大值。
4 min(tuple),返回元组中元素最小值。
5 tuple(seq),将列表转换为元组。

        可以通过变量去接收元组的值,通常叫做元组的拆分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
In [31]: tup1 = (a,'b','c')
In [32]: tup1
Out[32]: ('abc', 'b', 'c')
In [33]: first,second,third = tup1
In [34]: first
Out[34]: 'abc'
In [35]: second
Out[35]: 'b'
In [36]: third
Out[36]: 'c'