本教程将介绍列表和元组之间的主要区别,以及如何处理这两种数据结构。

列表和元组是一种数据结构,可以按预定的顺序保存一个或多个对象或项。我们可以在列表或元组中包含任何数据类型的对象,包括由None关键字定义的空数据类型。

什么是列表?

在其他编程语言中,列表对象的声明类似于数组。列表不必始终是同质的,因此它们可以同时存储不同数据类型的项。这使得列表成为最有用的工具之一。列表是Python的一种容器数据结构,用于同时保存多个数据片段。当我们需要迭代一些元素并保持这些项时,列表非常有用。

什么是元组?

元组是另一种数据结构,用于存储多种数据类型的项目集合,但与可变的列表不同,元组是不可变的。换句话说,元组是由逗号分隔的项目集合。由于其静态结构,元组比列表更高效。

列表和元组之间的区别

在大多数情况下,列表和元组是等效的。然而,在本文中有一些重要的区别需要探讨。

列表和元组的语法差异

列表的语法与元组的语法不同。元组的项由括号或圆括号()括起来,而列表的项由方括号[]括起来。

示例代码

 # Python code to show the difference between creating a list and a tuple  
  
list_ = [4, 5, 7, 1, 7]  
tuple_ = (4, 1, 8, 3, 9)  
  
print("List is: ", list_)  
print("Tuple is: ", tuple_) 

输出:

List is:  [4, 5, 7, 1, 7]
Tuple is:  (4, 1, 8, 3, 9)

上面的代码中,我们声明了一个名为list_的变量,其中包含从1到10的一定数量的整数。列表用方括号[]括起来。我们还创建了一个名为tuple_的变量,其中包含一定数量的整数。元组用花括号()括起来。在Python中,type()方法返回传递给它的数据结构或对象的数据类型。

示例代码

# Code to print the data type of the data structure using the type() function  
print( type(list_) )  
print( type(tuple_) )  

输出:

<class 'list'>
<class 'tuple'>

可变列表 vs. 不可变元组

列表和元组之间的一个重要区别是,列表是可变的,而元组是不可变的。这究竟意味着什么?这意味着列表的项可以更改或修改,而元组的项不能更改或修改。

我们不能将列表用作字典的键,因为它是可变的。这是因为Python字典的键是不可变对象。因此,如果需要,元组可以用作字典的键。

让我们考虑以下示例,突出显示了列表和元组在不可变性和可变性方面的区别。

示例代码

# Updating the element of list and tuple at a particular index  
  
# creating a list and a tuple  
list_ = ["Python", "Lists", "Tuples", "Differences"]  
tuple_ = ("Python", "Lists", "Tuples", "Differences")  
  
# modifying the last string in both data structures  
list_[3] = "Mutable"  
print( list_ )  
try:  
    tuple_[3] = "Immutable"  
    print( tuple_ )  
except TypeError:  
    print( "Tuples cannot be modified because they are immutable" )  

输出:

['Python', 'Lists', 'Tuples', 'Mutable']
Tuples cannot be modified because they are immutable

在上面的代码中,我们修改了list_中索引3处的字符串,Python解释器在输出中更新了索引3处的内容。此外,我们尝试在try块中修改元组的最后一个索引,但由于引发了错误,我们从except块中得到输出。这是因为元组是不可变的,当尝试修改元组时,Python解释器会引发TypeError。

大小差异

由于元组是不可变的,Python会分配更大的内存块,以减少开销。相反,Python为列表分配较小的内存块。因此,元组的内存比列表少。如果我们有大量的项,这使得元组比列表稍微更节省内存。

例如,考虑创建一个具有相同项的列表和元组,并比较它们的大小:

示例代码

# Code to show the difference in the size of a list and a tuple  
  
#creating a list and a tuple  
list_ = ["Python", "Lists", "Tuples", "Differences"]  
tuple_ = ("Python", "Lists", "Tuples", "Differences")  
# printing sizes   
print("Size of tuple: ", tuple_.__sizeof__())  
print("Size of list: ", list_.__sizeof__())  

输出:

Size of tuple:  28
Size of list:  52

可用函数

元组的内置函数比列表少。我们可以利用内置函数dir([object])来访问列表和元组的所有相应方法。

示例代码

# printing directory of list  
dir(list_)  

输出:

['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

示例代码

# Printing directory of a tuple  
print( dir(tuple_), end = ", " )  

输出:

['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

正如我们所观察到的,列表比元组具有更多的方法。使用内置函数,我们可以在列表中执行插入和弹出操作,以及从元组中删除和排序项目。

元组和列表:关键相似之处

  • 它们都保存项目的集合,是异构数据类型,这意味着它们可以同时包含多种数据类型。
  • 它们都是有序的,这意味着项目或对象的顺序与它们放置的顺序保持一致,直到手动更改为止。
  • 因为它们都是连续的数据结构,所以我们可以遍历它们所持有的对象;因此,它们是可迭代的。
  • 可以使用整数索引,用方括号[index]括起来,来访问这两种数据类型的对象。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程