1.元组 tuple
元组(tuple)是Python中的一种数据结构,它与列表(list)类似,但有一个重要的区别:元组是不可变的,即一旦创建,其元素就不能被修改。
元组的定义:
元组是由圆括号()
括起来的、由逗号分隔的多个元素组成的序列。这些元素可以是不同类型的数据,如整数、浮点数、字符串、列表、甚至是另一个元组。
元组的创建:
直接赋值=
使用圆括号()
将多个元素括起来,元素之间用逗号分隔。
注意:即使只有一个元素,也需要加上逗号来区分它是一个元组还是一个普通的括号表达式。
>>>t1 = ()#创建一个空元组变量t1
>>>t2 = (1,2,3,4,5)]#创建一个元素为整数的元组变量t2
>>>t3 = ('Python','BigData','AI') #创建元素为字符串的元组变量t3;
>>>t4 = ('乔峰', [1997,7,7],(90,1.83)) #元素的数据类型可以各不相同
注意:即使只有一个元素,也需要加上逗号来区分它是一个元组还是一个普通的括号表达式。
正确的元组定义:
当你使用逗号来分隔元素,并且整个表达式被括号包围时,Python 会将其视为一个元组。
t = (1,)
print(t) # 输出: (1,)
print(type(t)) # 输出: <class 'tuple'>
错误的元组定义(实际上是整数):
当你只写 (1)
而不加逗号时,Python 不会将其视为元组,而是将其视为一个整数表达式,括号在这里没有作用(除了在某些数学运算中改变优先级)
t = (1)
print(t) # 输出: 1
print(type(t)) # 输出: <class 'int'>
这里,Python 抛出了一个 TypeError
,因为整数 1
不能被迭代来生成元组。
尝试将整数转换为元组:
当你尝试使用 tuple()
函数将一个整数转换为元组时,你会遇到错误,因为 tuple()
函数期望一个可迭代对象(如列表、字符串、集合等),而整数不是可迭代的:
t = tuple(1)
# TypeError: 'int' object is not iterable
tuple()函数
tuple()
函数可以将一个可迭代对象(如列表、字符串、集合等)转换为一个元组。
tuple()函数可将其他序列转换为元组
>>> x = tuple() # 创建一个空元组
>>> y = [0,1,2,3,4] # 创建列表y
>>> z = tuple(y) #把列表y转换为元组, z的值为(0, 1, 2, 3, 4)
>>> t1= tuple(range(5)) # t1的值为 (0, 1, 2, 3, 4)
>>> t2= tuple('Python') # t2的结果为('P', 'y', 't', 'h', 'o', 'n')
元组的主要操作:元素的增、删、改、查
元组一旦定义就不允许更改其元素。
- 无法向元组中添加元素;
- 不能从元组中删除元素;
- 使用del可以删除元组对象,不能删除元组中的元素。
tuple( )冻结列表,而list( )融化元组
+,*运算符,in关键字,len(),max(),min()等内置函数,切片的用法与列表一致。
元组的优势:
元组的速度比列表更快
元组在性能上通常比列表更快,尤其是在创建和访问元素方面。这是因为元组是不可变的(immutable),一旦创建,其内容和结构就不能被改变。这种不可变性允许Python在内部对元组进行优化,例如通过减少内存分配和复制操作,以及可能利用更高效的数据结构来实现元组。相比之下,列表是可变的(mutable),允许在创建后添加、删除或修改元素,这些操作通常需要更多的内存和计算资源。
定义了一系列常量值时,使用元组而不是列表
当您有一系列不需要改变的常量值时,使用元组而不是列表是一个更好的选择。这是因为元组的不可变性可以防止代码意外地修改这些值,从而增加代码的健壮性和可读性。此外,由于元组在性能上通常更优,使用它们还可以提高程序的运行效率。
元组对不需要改变的数据进行“写保护”将使得代码更加安全
元组的不可变性提供了一种自然的“写保护”机制,可以防止代码中的错误或恶意行为修改数据。这种保护对于维护代码的正确性和稳定性至关重要。例如,在函数参数中使用元组可以确保传递给函数的值在函数执行期间不会被修改,从而避免了潜在的副作用和错误。
元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表不能当做字典键使用,因为列表不是不可变的。
由于元组是不可变的,因此它们可以用作字典(dictionary)的键。字典是一种基于键值对的数据结构,其中键必须是不可变的,以便能够在内部通过哈希函数进行快速查找。元组作为键时,可以包含字符串、数值和其他不可变的元组等数据类型。这使得元组在需要基于多个值进行快速查找和检索的场景中非常有