python - 列表和元组有什么区别?

标签 python list tuples

元组/列表之间有什么区别,它们的优点/缺点是什么?

最佳答案

除了元组是不可变的之外,还有一个语义区别应该指导它们的使用。元组是异构数据结构(即它们的条目具有不同的含义),而列表是同构序列。 元组有结构,列表有顺序。

使用这种区别使代码更加明确和易于理解。

一个例子是成对的页码和行号来引用书中的位置,例如:

my_location = (42, 11)  # page number, line number

然后,您可以将其用作字典中的键来存储有关位置的注释。另一方面,列表可用于存储多个位置。自然地,人们可能想要在列表中添加或删除位置,因此列表是可变的是有道理的。另一方面,从现有位置添加或删除项目是没有意义的 - 因此元组是不可变的。

在某些情况下,您可能想要更改现有位置元组中的项目,例如在遍历页面的行时。但是元组不变性迫使您为每个新值创建一个新的位置元组。从表面上看,这似乎很不方便,但使用像这样的不可变数据是值类型和函数式编程技术的基石,具有很大的优势。

关于这个问题有一些有趣的文章,例如"Python Tuples are Not Just Constant Lists""Understanding tuples vs. lists in Python" . Python 官方文档 also mentions this

"Tuples are immutable, and usually contain an heterogeneous sequence ...".

在像 Haskell 这样的静态类型语言中,元组中的值通常具有不同的类型,并且元组的长度必须是固定的。在列表中,值都具有相同的类型,并且长度不固定。所以区别非常明显。

终于有了 namedtuple在 Python 中,这是有道理的,因为元组已经应该具有结构。这强调了元组是类和实例的轻量级替代方案。

关于python - 列表和元组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626759/

相关文章:

Python - 如何解析JSON并将其保存到MYSQL数据库

list - Haskell 递增元组的最后一个元素

c# - 如何更快地将元素/对象添加到列表中?

list - 通过as.character()将列表强制转换为字符时,为什么会出现这种行为?

python - 如何从 Python 中的元组中的每个值中减一?

arrays - 对元组数组求和

python - re.match 接受除空之外的任何返回值

python - lambda 的字符串表示

python - 在 python 中使用组合对象

python - 更改元组列表中元组的第一个值