Python 元组


元组是可包含多种类型数据的序列。元组和列表很相似,不同的是元组是不可以更改的。


元组可以作为字典的key。

函数返回值有多个时,常用元组作为返回值。

创建元组

元组有下面几种创建方式:

  • 元组元素前后加上一个括号,元组元素之间使用逗号分隔,元组前后的括号是可选的。例如:(1, 2, 'hello')。
  • 通过元组运算符创建元组。例如:(1, 2) * 3,(1, 2) + ('3', '4')。

创建只有一个元素的元组,必须在元素后加一个逗号。例如(1,)

下面是创建元组的例子:

#!/usr/bin/python
print((1, 2, 'hello'))  # (1, 2, 'hello')
print((1,))     # (1,)

print((1, 2, 'hello') + ('world',)) # (1, 2, 'hello', 'world')
print((1, 2, 'hello')[1 : 3])       # (2, 'hello')

元组运算符

有下面几个运算符用于元组:

  • ==:比较两个元组是否相等。
  • +:合并两个元组为一个元组。
  • *:重复元组元素指定次数。
  • []:元组索引,返回指定索引处的元素。第1个元素索引为0,也可以用负数表示索引,最后1个元素索引是-1,倒数第2个元素索引是-2。
  • [:]:对元组切片。:前面是开始索引,后面是结束索引(返回元组不包含结束索引处的元素)。如果省略开始和结束索引,表示开始索引是0,结束索引是最后位置。也可以使用负数表示索引位置。
  • in:对象是否包含在元组中。
  • not in:对象是否没包含在元组中。

可能通过赋值运算符将元组的元素赋值给多个变量,称为Tuple unpacking。例如:a, b, c = (1, 2, 'hello')

下面是元组运算符的例子:

#!/usr/bin/python
print((1, 2) == (1, 2)) # True

print((1, '2') * 2)     # (1, '2', 1, '2')
print((1, 2, 'hello') + ('world',))  # (1, 2, 'hello', 'world')
print((1, 2, 'hello')[1 : 3])   # (2, 'hello')

print(1 in (1, 2))      # True
print(1 not in (1, 2))  # False

打包和解包

打包(packing)指将多个元素打包成一个元组。

解包(unpacking)指将一个元组的元素赋值给多个变量。多用于将函数或方法的元组类型的返回值赋值给多个变量。

下面是打包和解包的例子:

#!/usr/bin/python
tuple = 2, 'world'
print(tuple)    # (2, 'world')

tuple2 = (1, 'hello')
a, b = tuple2
print(a, b)     # 1 hello

def pack(x, y):
    return (x + 1, y + 2)

tuple3 = pack(1, 2)
i, j = tuple3
print(i, j)     # 2 4

更改、删除元组

元组是不可改变的序列。不能往元组中增加元素。

不能通过[]运算符来更改元组中的元素。但如果元组中的元素是可以改变的序列,例如列表,那么就可以更改列表中的元素。

不能删除元组中单个元素。可以使用del语句删除整个元组。

下面是更改、删除元组的例子:

#!/usr/bin/python
t = (1, 2, ['red', 'blue'])

# t[0] = '1'    # error : TypeError: 'tuple' object does not support item assignment
print(t)    # (1, 2, ['red', 'blue'])
t[2][0] = 'green'
print(t)    # (1, 2, ['green', 'blue'])

del t
# print(t)    # error : NameError: name 't' is not defined

常用元组函数

  • all:如果元组中的所有元素都为True或元组是空的,则返回True。
  • any:如果元组中有一个元素为True,则返回True。如果元组是空的,返回False。
  • enumerate:返回一个枚举对象,包含元组中所有元素的索引和值为一个元组。
  • len:返回元组的长度。
  • max:返回元组中最大的元素。
  • min:返回元组中最小的元素。
  • sorted:返回一个新的排过序的列表,不更改参数元组。
  • sum:返回元组中元素的和。
  • tuple:将一个序列(列表、字符串、字典、集合)转换成元组。

下面是常用元组函数的例子:

#!/usr/bin/python
tuple = ('red', 'blue')

for e in enumerate(tuple):
    print(e, end=', ')  # (0, 'red'), (1, 'blue'),

print('\n', sorted(tuple))  # ['blue', 'red']

常用元组方法

  • count:返回指定元素在元组中出现的次数。
  • index:返回指定元素在元组中第一次出现的索引。

官方链接