Python元组

Python有几种顺序的数据类型,可让您以有组织的高效方式存储数据集合。 基本序列类型是字符串,列表,元组和范围对象。

本文将引导您了解Python元组的基础知识。 我们将向您展示如何创建元组,访问元素,解压缩元组等等。

元组与列表相似,主要区别在于列表是可变的,而元组是不可变的。 这意味着创建后不能更改元组。

元组既可以存储异构数据,也可以存储同类数据,但通常用于存储异构元素的集合。

创建元组

通过将项目放在一对圆括号中来创建元组 [], 被逗号隔开。 它们可以具有任意数量的项目,这些项目可以是不同的类型。 这是一个例子:

colors = ('orange', 'white', 'green')

元组可以具有混合数据类型的项目。 您还可以声明嵌套元组,其中更多的项是列表,元组或字典:

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))

圆括号之间没有元素表示一个空的元组:

my_tuple = ()

要创建仅包含一个元素的元组,必须在该元素后添加一个逗号:

my_tuple = (1)
type(my_tuple)
my_tuple = (1,)
type(my_tuple)
<class 'int'>
<class 'tuple'>

元组也可以使用 tuple() 构造函数:

colors_list = ['orange', 'white', 'green']
colors_typle = tuple(colors_list)
print(type(colors_typle))
<class 'tuple'>

构造元组的另一种方法是使用元组打包功能,该功能允许您从一系列用逗号分隔的对象中创建元组:

directions = "North", "South", "East", "West"
print(type(directions))
<class 'tuple'>

访问元组元素

元组项目可以通过其索引引用。 索引是整数,从 0n-1 哪里 n 是项目数:

my_tuple = ["a", "b", "c", "d"]
             0    1    2    3

在Python中,索引用方括号指定:

my_tuple[index]

例如,访问元组的第三个元素,您将 tuple_name[2]

directions = ("North", "South", "East", "West")directions[2]
'East'

如果您引用的索引不存在, IndexError 引发异常:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

要访问嵌套元组中的项目,请使用多个索引:

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))my_tuple[3][1]
'bar'

您还可以使用负索引访问元组元素。 最后一项称为 -1,倒数第二个项目为 -2 等等:

my_tuple = ("a", "b", "c", "d")
            -4   -3   -2   -1
directions = ("North", "South", "East", "West")directions[-2]
'East'

切片元组

在Python中,您可以使用以下形式对元组和其他顺序数据类型进行切片:

sequence[start:stop:step]
  • start 是提取开始的索引。 当使用负索引时,它表示从元组末尾的偏移量。 如果省略此参数,则切片从索引0开始。
  • stop 是结束提取之前的索引; 结果不包含“停止”元素。 当使用负索引时,它表示从元组末尾的偏移量。 如果省略此参数或大于元组的长度,则切片将转到元组的末尾。
  • step 是一个可选参数,它指定切片的步骤。 未指定时,默认值为1。如果使用负值,则切片将采用相反的顺序获取元素。

切片元组的结果是包含提取的元素的新元组。

以下形式在Python中是合法的:

T[:] # copy whole tuple
T[start:] # slice the tuple starting from the element with index "start" to the end of the tuple.
T[:stop] # slice the tuple starting from the begging up to but not including the element with index "stop".
T[start:stop] #  slice the tuple starting from the element with index "start" up to but not including the element with index "stop".
stop"
T[::step] # slice the tuple with a stride of "step"

下面是一个示例,该示例如何切片从索引为1的元素开始到但不包括索引为4的元素的元组:

vegetables = ('Potatoes', 'Garlic', 'Celery', 'Carrots', 'Broccoli')vegetables[1:4]
('Garlic', 'Celery', 'Carrots')

打开元组包装

Python功能中的序列解压缩,使您可以将分配序列对象分配给变量。 这是一个例子:

colors = ('orange', 'white', 'green')
a, b, c = colors
print(a)
print(b)
print(c)

根据其位置将元组元素的值分配给左侧的变量:

orange
white
green

打开元组的包装时,左侧元组上的变量数必须与元组元素的数相同。 否则,您会得到一个 ValueError 例外。

colors = ('orange', 'white', 'green')
a, b = colors
ValueError: too many values to unpack (expected 2)

当方法或函数返回对象序列时,解压缩很方便:

def square_area_circumference(side_lenght):
  return side_lenght * side_lenght, side_lenght * 4

area, circumference = square_area_circumference(5)

print(area)
print(circumference)
25
20

更改元组

由于元组是不可变的数据结构,因此我们无法直接更新它们。 您不能添加,更改,删除元组中的元素。

如果您尝试更改元组元素,则会得到 TypeError 例外:

colors = ("orange", "white", "green")
colors[1] = "blue"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

可变元组项的元素可以更改。 例如,如果元组将列表作为其元素之一,则可以更新列表元素:

my_tuple = (1, 2, [5, 6, 7])
my_tuple[2][1] = 4
print(my_tuple)
(1, 2, [5, 4, 7])

元组长度

内建 len() 函数返回给定对象的项目总数。

要查找元组的长度,请将其作为参数传递给 len() 功能:

len(L)

这是一个例子:

colors = ("orange", "white", "green")
lenght = len(colors)
print(lenght)
3

通过元组迭代

要遍历元组中的所有元素,可以使用 for 循环:

directions = ("North", "South", "East", "West")
for direction in directions:
  print(direction)
North
South
East
West

如果需要索引,则可以使用几种方法。 最常见的方法是将 range()len() 功能或使用内置 enumerate() 功能。

下面的示例显示如何检索元组中每个项目的索引和值:

directions = ("North", "South", "East", "West")
for i in range(len(directions)):
  print("Index {} : Value {}".format(i, directions[i]))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West

而不是使用 range(len(...)) 模式,您可以使用 enumerate() 函数以更Python化的方式遍历元组:

directions = ("North", "South", "East", "West")
for index, value in enumerate(directions): 
  print("Index {} : Value {}".format(index, value))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West

检查元素是否存在

要检查元组中是否存在元素,可以使用 innot in 运营商:

colors = ("orange", "white", "green")
print("orange" in colors)

输出将是 True 要么 False

True

这是使用 if 声明:

colors = ("orange", "white", "green")
if "blue" not in colors:
  print("no")
else:
  print("yes")
no

元组方法

元组对象接受以下方法:

  • count(x) -返回“ x”出现在元组中的次数。
  • index(x) -返回值为“ x”的元素首次出现的位置。

以下是显示如何使用方法的简单示例:

my_tuple = ("a", "s", "s", "q", "a", "n")
print(my_tuple.count('a'))
print(my_tuple.index('a'))
2
0

结论#

在Python中,元组是对象的不变序列,一旦创建就无法更改。

如果您有任何问题或反馈,请随时发表评论。

蟒蛇

Sidebar