有什么区别?

元组/列表的优点/缺点是什么?

推荐答案

除了元组是不变的之外,还有一个语义上的区别应该指导它们的使用.元组是异构数据 struct (即,它们的条目具有不同的含义),而列表是同质序列.Tuples have structure, lists have order.

使用这一区别可以使代码更明确、更易于理解.

一个例子是一本书中参考位置的页码和行号对,例如:

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

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

在某些情况下,您可能希望更改现有位置元组中的项,例如在遍历页面的行时.但元组不变性迫使您 for each 新值创建一个新的位置元组.从表面上看,这似乎不太方便,但像这样使用不可变数据是值类型和函数式编程技术的基石,它们可能具有实质性的优势.

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

"元组是不可变的,通常包含异构序列……".

在静态类型语言(如Haskell)中,元组中的值通常有不同的类型,元组的长度必须固定.在列表中,所有值都具有相同的类型,且长度不固定.所以差别非常明显.

最后是Python中的namedtuple,这很有意义,因为元组应该已经有了 struct .这突显了元组是类和实例的轻量级替代品的 idea .

Python相关问答推荐

使用GEKKO在简单DTE系统中进行一致初始化

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

Pandas 在最近的日期合并,考虑到破产

有症状地 destruct 了Python中的regex?

如何在Django基于类的视图中有效地使用UTE和RST HTIP方法?

如何更改分组条形图中条形图的 colored颜色 ?

Pandas Loc Select 到NaN和值列表

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

跳过嵌套JSON中的级别并转换为Pandas Rame

使用Openpyxl从Excel中的折线图更改图表样式

Discord.py -

pandas fill和bfill基于另一列中的条件

如何在Gekko中使用分层条件约束

在numpy数组中寻找楼梯状 struct

使用嵌套对象字段的Qdrant过滤

如何在一组行中找到循环?

Python Mercury离线安装

如何在Python中自动创建数字文件夹和正在进行的文件夹?

Pandas:将值从一列移动到适当的列

对数据帧进行分组,并按组间等概率抽样n行