跳至内容

Python 元组

元组 Tuple 与列表 List 类似,不同之处是元组一旦赋值就不可以再修改。列表反之。

创建元组

Python中,将元素放入括号 () 中,逗号 , 分隔 , 的方式创建元组。括号 () 是可选的。

元组可以有任意数量、任意类型的元素(整型、浮点型、列表、字符串等)

例如

python
# 空元组
tuple_exam = ()
print(tuple_exam)

# 全是整数的元组
tuple_exam = (1, 2, 3)
print(tuple_exam)

# 混合类型的元组
tuple_exam = (1, "w3query", 1.2)
print(tuple_exam)

# 嵌套元组
tuple_exam = (1, [11, 12, 13], (1, 2, 3))
print(tuple_exam)


# 输出:
# ()
# (1, 2, 3)
# (1, "w3query", 1.2) 
# (1, [11, 12, 13], (1, 2, 3))
# 空元组
tuple_exam = ()
print(tuple_exam)

# 全是整数的元组
tuple_exam = (1, 2, 3)
print(tuple_exam)

# 混合类型的元组
tuple_exam = (1, "w3query", 1.2)
print(tuple_exam)

# 嵌套元组
tuple_exam = (1, [11, 12, 13], (1, 2, 3))
print(tuple_exam)


# 输出:
# ()
# (1, 2, 3)
# (1, "w3query", 1.2) 
# (1, [11, 12, 13], (1, 2, 3))

提示

创建元组时,虽然可以省略括号()。但是作为良好的编程习惯,我们不建议省略。

创建一个元素的元组

Python中,创建一个元素的元组有点奇怪。需要在单元素后面加上逗号 , 以指明这是一个元组。

例如

python
# 字符串
var1 = "w3query" 
# 加上括号,仍然是字符串
var2 = ("w3query")
# 带有逗号,是元组
var3 = ("w3query", )
# 带有逗号,是元组,括号可省略
var4 = "w3query",

print(type(var1))
print(type(var2))
print(type(var3))


# 输出:
# <class 'str'>
# <class 'str'>
# <class 'tuple'>
# <class 'tuple'>
# 字符串
var1 = "w3query" 
# 加上括号,仍然是字符串
var2 = ("w3query")
# 带有逗号,是元组
var3 = ("w3query", )
# 带有逗号,是元组,括号可省略
var4 = "w3query",

print(type(var1))
print(type(var2))
print(type(var3))


# 输出:
# <class 'str'>
# <class 'str'>
# <class 'tuple'>
# <class 'tuple'>

元组访问

和列表索引类似,元组的元素也可以通过索引表示,第一个元素的索引值为0。

1. 索引

Python中,使用索引操作符 [] 访问元组的元素。比如,一个有5个元素的元组,其索引值从0到4。访问不存在的索引,将会出发 IndexError 异常。

索引值必须是整型值,不能是浮点数或其他类型,否则报 TypeError 异常。

例如

python
# 字符串
words = ("this", "is", "a", "site")

# 读取第1个元素
print(words[0])
# 读取第4个元素
print(words[3])


# 输出:
# this
# site
# 字符串
words = ("this", "is", "a", "site")

# 读取第1个元素
print(words[0])
# 读取第4个元素
print(words[3])


# 输出:
# this
# site

提示

注意索引值和第N个元素的区别;索引值是从0开始,第N个从第1个开始。

2. 负索引

Python支持负数索引。索引值-1指的是最后一个元素,-2指的是倒数第二个,依此类推。

例如

python
# 字符串
words = ("this", "is", "a", "site")

# 读取第1个元素
print(words[-1])
# 读取第4个元素
print(words[-3])


# 输出:
# site
# is
# 字符串
words = ("this", "is", "a", "site")

# 读取第1个元素
print(words[-1])
# 读取第4个元素
print(words[-3])


# 输出:
# site
# is

3. 截取

Python中,可以使用截取操作符:读取元组的部分元素。

例如

python
# 字符串
words = ("this", "is", "a", "site")

# 读取索引0到2的元素(不包括索引2)
print(words[0:2])
# 读取从开始到倒数第2个元素(不包括倒数第2个)
print(words[:-1])
# 读取索引2到结尾的元素
print(words[2:])
# 读取开头到结尾的元素
print(words[:])


# 输出:
# ("this", "is")
# ("this", "is", "a")
# ("a", "site")
# ("this", "is", "a", "site")
# 字符串
words = ("this", "is", "a", "site")

# 读取索引0到2的元素(不包括索引2)
print(words[0:2])
# 读取从开始到倒数第2个元素(不包括倒数第2个)
print(words[:-1])
# 读取索引2到结尾的元素
print(words[2:])
# 读取开头到结尾的元素
print(words[:])


# 输出:
# ("this", "is")
# ("this", "is", "a")
# ("a", "site")
# ("this", "is", "a", "site")

提示

当对元组进行截取时 [起始索引:结尾索引] , 截取后元组包含起始索引对应元素,不包含结尾索引对应元素。

元组方法

Python中,由于元组不支持修改,新增和删除操作都是不支持的。元组仅提供了两个方法。

  • count() - 计算元素出现的个数
  • index() - 查找元素首次出现的索引值

例如

python
# 字符串
words = ('w', 'w', 'w', '.', 'w', '.', 'q')

# 计算元素w出现的次数
count = words.count('w')
# 计算元素.出现的位置
index = words.index('.')


# 输出:
# 4
# 3
# 字符串
words = ('w', 'w', 'w', '.', 'w', '.', 'q')

# 计算元素w出现的次数
count = words.count('w')
# 计算元素.出现的位置
index = words.index('.')


# 输出:
# 4
# 3

元组遍历

Python中,可以使用for循环遍历元组

例如

python
langs = ("java", "cpp", "python")
for lang in langs:
    print(lang)


# 输出:
# java
# cpp
# python
langs = ("java", "cpp", "python")
for lang in langs:
    print(lang)


# 输出:
# java
# cpp
# python

元组查找

Python中,可以使用 in 关键字来检查元组中某元素是否存在。

例如

python
langs = ("java", "cpp", "python")
print("php" in langs)
print("python" in langs)


# 输出:
# False
# True
langs = ("java", "cpp", "python")
print("php" in langs)
print("python" in langs)


# 输出:
# False
# True

元组优点

由于元组和列表非常相似,所以大多数场景下,二者是共用的。

但是相比于列表,元组还是有一些优点:

  • 一般使用元组存放不同数据类型的元素,使用列表存储相同类型的元素
  • 由于元组的不可变特性,所以元组的遍历速度更快。
  • 由于元组的不可变特性,因此元组的元素可以用作字典的键值。
  • 如果设计上数据不可变,那么在实现时选择元组类型,可以保证数据是只读的。