了解Python 3中的元组

元组是一种数据结构,它是一个不可变的或不可改变的有序元素序列。因为元组是不可变的,所以它们的值不能被修改。元组用于对数据进行分组。元组内的每个元素或值称为项目。

介绍

Python中的元组看起来像这样:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
元组是一种数据结构,它是一个不可变的或不可改变的有序元素序列。因为元组是不可变的,所以它们的值不能被修改。 元组用于对数据进行分组。元组内的每个元素或值称为项目。 正如字符串被定义为引号之间的字符一样,元组通过在括号( )之间具有值来定义。 如果我们print()上面的元组,我们将收到以下输出,元组仍然由括号括起:
print(coral)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
当考虑Python元组和其他数据结构是集合类型时,考虑您的计算机上所有不同的集合是有用的:文件,歌曲播放列表,浏览器书签,电子邮件,视频集合您可以在流媒体服务上访问,等等。 元组与列表类似,但它们的值不能修改。因此,当您在代码中使用元组时,您向其他人传达您不打算更改该值序列。此外,因为值不会改变,您的代码可以通过使用Python中的元组进行优化,因为代码对元组来说比列表的快一点。

索引元组

作为元素的有序序列,元组中的每个项可以通过索引单独调用。 每个项目对应于索引号,其是从索引号0开始的整数值。 对于coral元组,索引细分如下:
'蓝珊瑚' 'staghorn珊瑚' '柱珊瑚' 'elkhorn珊瑚'
0 1 2 3
第一个项目,字符串'blue coral'从索引0开始,列表以索引4结束,项目'elkhorn coral'结束。 因为Python元组中的每个项目都有相应的索引号,所以我们可以访问项目。 现在我们可以通过引用它的索引号来调用元组的离散项:
print(coral[2])
pillar coral
此元组的索引号范围为0 - 3 ,如上表所示。所以要单独调用任何项目,我们将引用索引号如下:
coral[0] = 'blue coral'
coral[1] = 'staghorn coral' 
coral[2] = 'pillar coral' 
coral[3] = 'elkhorn coral'
如果我们调用任何索引号大于3的元组coral ,它将超出范围,因为它将无效:
print(coral[22])
IndexError: tuple index out of range
除了正索引号之外,我们还可以通过从元组结尾向后计数,从-1开始,通过负索引号访问来自元组的项。这是特别有用的,如果我们有一个长的元组,我们要精确定位一个项目朝向元组的结尾。 对于同一个元组coral ,负折射率细分如下:
'blue coral' 'staghorn coral' 'pillar coral' 'elkhorn coral'
-4 -3 -2 -1
所以,如果我们想通过使用其负索引号打印出项目'blue coral' ,我们可以这样做:
print(coral[-4])
blue coral
我们可以使用+运算符将字符串项与其他字符串连接在一个元组中:
print('This reef is made up of ' + coral[1])
This reef is made up of staghorn coral
我们能够将索引号0的字符串项与字符串'This reef is made up of ' 。 我们还可以使用+运算符将2个或更多的元组连接在一起 。 通过索引号对应于元组中的项,我们能够离散地访问元组的每个项。

切片元组

我们可以使用索引来从元组中调出几个项目。切片允许我们通过创建一个用冒号[x:y]分隔的索引号范围来调用多个值。 假设我们想打印coral的中间项,我们可以通过创建一个切片来实现。
print(coral[1:3])
('staghorn coral', 'pillar coral')
当创建切片时,如在[1:3] ,第一个索引号是切片开始(包含),第二个索引号是切片结束(排除),这就是为什么在上面的示例中,位置, 12是打印输出的项目。 如果我们想要包括列表的任何一端,我们可以省略tuple[x:y]语法中的一个数字。 例如,如果我们要打印元组coral的前3个项目 - 这将是'blue coral''staghorn coral''pillar coral' - 我们可以这样做通过键入:
print(coral[:3])
('blue coral', 'staghorn coral', 'pillar coral')
这打印了元组的开头,在索引3之前停止。 要包含元组结尾处的所有项目,我们将颠倒语法:
print(coral[1:])
('staghorn coral', 'pillar coral', 'elkhorn coral')
当切片元组时,我们也可以使用负索引号,就像使用正索引号一样:
print(coral[-3:-1])
print(coral[-2:])
('staghorn coral', 'pillar coral')
('pillar coral', 'elkhorn coral')
我们可以与切片一起使用的最后一个参数是stride ,它指的是在从元组中检索第一个项目后,向前移动多少项。 到目前为止,我们省略了stride参数,Python默认为stride为1,因此检索两个索引号之间的每个项。 此构造的语法是tuple[x:y:z]z指向stride。让我们做一个更大的列表,然后切片,并给步幅值2:
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

print(numbers[1:11:2])
(1, 3, 5, 7, 9)
我们的结构numbers[1:11:2]打印包含1和不包括11索引值之间的值,则步长值2指示程序仅打印其他项目。 我们可以省略前两个参数,并使用stride单独作为参数与语法tuple[::z]
print(numbers[::3])
(0, 3, 6, 9, 12)
通过打印出步幅设置为3的元组numbers ,只打印每第三个项目: 0,1,2,3,4,5,6,7,8,9,10,11,12 使用正索引和负索引编号和指示步幅的元组为我们提供了接收我们试图实现的输出的控制。

连接和乘法元组

运算符可用于连接或乘加元组。 连接使用+运算符完成,乘法使用*运算符完成。 +运算符可用于将两个或多个元组连接在一起。我们可以将两个现有元组的值分配给一个新的元组:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')

coral_kelp = (coral + kelp)

print(coral_kelp)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
因为+运算符可以连接,所以它可以用于组合元组以形成新的元组,尽管它不能修改现有的元组。 *运算符可用于乘以元组。也许你需要将目录中的所有文件复制到服务器上或与朋友共享播放列表 - 在这些情况下,您需要将数据集合相乘。 让我们将coral元组乘以2,将kelp元组乘以3,并将它们分配给新的元组:
multiplied_coral = coral * 2
multiplied_kelp = kelp * 3

print(multiplied_coral)
print(multiplied_kelp)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
('wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
通过使用*运算符,我们可以按我们指定的次数复制我们的元组,根据原始数据序列创建新的元组。 可以通过使用+*运算符来连接或相乘现有元组以形成新的元组。

元组函数

有几个内置函数可以用来处理元组。让我们来看几个。

len()

与字符串和列表一样,我们可以使用len()元组的len() ,其中我们将元组作为参数传递,如:
len(coral)
当需要强制执行最小或最大集合长度时,或者比较排序数据时,此功能非常有用。 如果我们打印出元组kelp和numbers的长度,我们将收到以下输出:
print(len(kelp))
print(len(numbers))
4
13
我们收到上面的输出,因为元组kelp带有4个项目:
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
元组numbers有13项:
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
尽管这些示例具有相对较少的项目, len()函数为我们提供了查看大的元组中有多少项的机会。

max()和min()

当我们使用由数字项组成的元组(包括整数浮点数 )时,我们可以使用max()min()函数找到相应元组中包含的最高和最低值。 这些功能使我们能够找到关于定量数据的信息,例如测试分数,温度,价格等。 让我们看看由浮点数组成的元组:
more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)
为了得到max() ,我们将元组传递给函数,如max(more_numbers) 。 我们将它与print()函数结合起来,以便我们可以输出结果:
print(max(more_numbers))
95.59
max()函数返回我们的元组中的最大值。 类似地,我们可以使用min()函数:
print(min(more_numbers))
11.12
这里,在元组中找到最小的浮点,并打印出来。 就像使用len()函数一样,当使用包含许多值的元组时, max()min()函数非常有用。

元组如何与列表不同

元组与列表不同的主要方式是它们不能被修改。这意味着项不能添加到元组或从元组中删除,并且项不能在元组中替换。 但是,您可以连接 2个或更多元组以形成新的元组。 让我们考虑一下我们的coral元组:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
假设我们想要用'black coral'替换另一个项目'blue coral' 'black coral' 。如果我们尝试改变输出,就像我们使用列表一样,输入:
coral[0] = 'black coral'
我们将收到一个错误作为我们的输出:
TypeError: 'tuple' object does not support item assignment
这是因为元组不能被修改。 如果我们创建一个元组并决定我们真正需要的是一个列表,我们可以将它转换为列表。要将元组转换为列表,我们可以使用list()
list(coral)
现在,我们的coral数据类型将是一个列表:
coral = ['blue coral', 'staghorn coral', 'pillar coral']
我们可以看到,元组被转换为列表,因为括号改为方括号。 同样,我们可以使用tuple()将列表转换为元tuple() 。 您可以通过阅读“ 如何转换Python 3中的数据类型 ”了解有关数据类型转换的更多信息。

结论

元组数据类型是无法修改的有序数据类型,通过比Python处理的列表更快的类型,为您的程序提供优化。当其他人与您在代码上进行协作时,您使用元组将向他们表明,您不打算修改这些值序列。 本教程介绍了元组的基本功能,包括索引,切片和连接元组,以及显示可用的内置函数。