1-创建元组
方法一:用逗号分隔序列值
方法二:tuple函数
# 方法一:用逗号分隔序列值
In [1]: tup = 4, 5, 6
In [2]: tup
Out[2]: (4, 5, 6)
In [3]: nested_tup = (4, 5, 6), (7, 8)
In [4]: nested_tup
Out[4]: ((4, 5, 6), (7, 8))
# 方法二:
In [5]: tuple([4, 0, 2])
Out[5]: (4, 0, 2)
In [6]: tup = tuple('string')
In [7]: tup
Out[7]: ('s', 't', 'r', 'i', 'n', 'g')
2-元组函数
索引
元组中的元素可以通过中括号[ ]来获取。
In [8]: tup[0]
Out[8]: 's'
元组不可变性的应用
# 举例1:元组一旦创建,各个位置上的对象是无法被修改的。
In [9]: tup = tuple(['foo', [1, 2], True])
In [10]: tup[2] = False
--------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-c7308343b841> in <module>()
----> 1 tup[2] = False
TypeError: 'tuple' object does not support item assignment
# 举例2:如果元组中某个元素可变,例如列表,可以在它内部修改
In [11]: tup = ('foo', [1, 2], True)
In [12]:tup[1].append(3)
In [13]: tup
Out[13]: ('foo', [1, 2, 3], True)
连接元组
可以使用+连接元组生成更长的元组:
In [13]: (4, None, 'foo') + (6, 0) + ('bar',)
Out[13]: (4, None, 'foo', 6, 0, 'bar')
拷贝元组
将元组乘以整数,会生成有多份拷贝的元组。列表同。
In [14]: ('foo', 'bar') * 4
Out[14]: ('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')```
元组拆包
如果想把元组的值赋给变量,Python会对等号右边的值拆包。
# 举例1
In [15]: tup = (4, 5, 6)
In [16]: a, b, c = tup
In [17]: b
Out[17]: 5
# 举例2
In [18]: tup = 4, 5, (6, 7)
In [19]: a, b, (c, d) = tup
In [20]: d
Out[20]: 7
拆包应用
# 应用1:交换(在其他语言中,可能需要第三个变量)
In [21]: a, b = 1, 2
In [24]: b, a = a, b
In [25]: a
Out[25]: 2
In [26]: b
Out[26]: 1
# 应用2:遍历列表或元组组成的序列
In [27]: seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
In [28]: for a, b, c in seq:
....: print('a={0}, b={1}, c={2}'.format(a, b, c))
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9
拆包升级:用rest或_存储剩下的元素
In [29]: values = 1, 2, 3, 4, 5
In [30]: a, b, *rest = values
# a, b, *_ = values
In [31]: a, b
Out[31]: (1, 2)
In [32]: rest
Out[32]: [3, 4, 5]
3-元组方法
count
由于元组的内容和长度是无法改变的,所以常用count计数。
In [34]: a = (1, 2, 2, 2, 3, 4, 2)
In [35]: a.count(2) # 计算元组中2出现的次数
Out[35]: 4