Python3 - Lists Vs Tuple

Python3 - Lists Vs Tuple 首页 / Python3入门教程 / Python3 - Lists Vs Tuple

在本教程中,无涯教程将学习列表(List)和元组(Tuple)之间的重要区别,以及两者在Python中的重要作用。

列表和元组用于顺序存储一个或多个Python对象或数据类型。两者都可以存储任何数据,例如整数,浮点数,字符串和字典。列表和元组在大多数因素中都是相似的,但是在这里将描述它们之间的主要区别。

表现差异

列表和元组的表示形式略有不同。列表通常用方括号[]括起来,而元素是用逗号分隔的元素。元组用圆括号()括起来,元素用逗号分隔。括号是可选使用的,这些类型的元组称为元组包装。

考虑以下示例。

list1 = ['Learnfk', 1, 2, 54.30, {'Name: ''Peter'}]
print(type(list))
tuple1 = ('Learnfk',5,8,31.9,[1,2,3])
print(type(tuple1))

输出:

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

在上面的程序中,定义了一个 list1 变量,该变量包含一个从索引0到4的不同数据类型的列表。定义了另一个变量 tuple1 ,该变量包含一个不同的元组数据类型。它用()括起来。

可变和不可变

这是列表和元组之间最重要的区别,而列表(List)是可变的,而元组(Tuple)是不可变的。列表是可变的,这意味着可以在创建后修改Python对象,而在创建后不能修改元组。考虑给定的例子。

a = ["Peter","Joseph","Mathew","Ricky"]
print(a)

输出:

['Peter', 'Joseph', 'Mathew', 'Ricky']

现在将第0 索引元素" Peter"更改为" Samson"。

a[0] = "Samson"
print(a)

输出:

['Samson', 'Joseph', 'Mathew', 'Ricky']

现在,创建一个元组并执行相同的操作。

a = (10,20,"Learnfk",30,40)
print(a)

输出:

(10, 20, 'Learnfk', 30, 40)
a[0] = 50

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-5-52b2981fae12> in <module>
----> 1 a[0] = 50

TypeError: 'tuple' object does not support item assignment

由于不可变性,在更改元组的1 st 元素时出现错误。它不支持项目分配。

调试差异

由于其不变性,元组很容易在大型项目中调试。如果无涯教程的项目很小或数据数量较少,则列表将发挥有效的作用。

a = [6,9,4,3,7,0,1]
# 复制B引用A中的地址
b = a
a[3] = "LearnFK"
print(a)

输出:

[6, 9, 4, 'LearnFK', 7, 0, 1]

在上面的代码中,做了 b = a ;这里没有将列表对象从b复制到a。 b 是指列表 a 的地址。这意味着,如果在b中进行更改,则该更改将与列表 a 中的更改相同,并且使调试变得容易。

跟踪列表中的更改将非常复杂,但是创建后不变的对象元组将无法更改。因此,元组易于调试。

函数差异

元组支持的操作少于列表。内置的 dir(object)用于获取列表和元组的所有受支持函数。

  • 列表函数
dir(list)

输出:

['__add__','__class__','__contains__','__delattr__','__delitem__','__dir_,
 '__doc__','__eq__','__format__', '__get__','__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']
  • 元组函数
dir(tuple)

输出:

['__add__',
 '__class__',
 '__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']

元组比列表具有更高的内存效率,因为元组具有较少的内置操作。列表适用于较少的元素,而元组要比包含大量数据的列表快一点。

Tuple = (1,2,3,4,5,6,7,8,9,0,5485,87525,955,3343,53234,6423,623456,234535)
List = [1,2,3,4,5,6,7,8,9,0,78,34,43,32,43,55,54,212,642,533,43434,54532 ]
print('Tuple size =', Tuple.__sizeof__())       # Tuple size = 52
print('List size =', List.__sizeof__())  

输出:

Tuple size = 168
List size = 216

结论

  • 在某些情况下,列表似乎比元组有用。但是元组是Python的重要数据结构。元组通常用于不可更改的数据,或者可以说在元组中数据将被"写保护" 。元组将指示发送给Python解释器,以后数据将不再更改。
  • 无涯教程可以使用与字典相同的元组,而无需使用键来存储数据。例如-
list1 = [(101, "Mike", 24),(102, 'Hussey', 26),(103, 'David', 27),(104,  'Warner', 29)]
  • 元组可以用作字典键,因为它们是可哈希且不可变的,而列表不能在字典中使用键。
dict = {("Mike",22):24000}    #有效词典
dict = {["Peter",26]:25000}   #无效的字典

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出计算机组成原理 -〔徐文浩〕

编辑训练营 -〔总编室〕

图解 Google V8 -〔李兵〕

微信小程序全栈开发实战 -〔李艺〕

分布式系统案例课 -〔杨波〕

人人都用得上的写作课 -〔涵柏〕

容器实战高手课 -〔李程远〕

如何落地业务建模 -〔徐昊〕

网络排查案例课 -〔杨胜辉〕

好记忆不如烂笔头。留下您的足迹吧 :)