列表和元组有什么区别?
有什么不同?
元组/列表有什么优点/缺点?
除了元组是不可变的,还有一个应该引导它们用法的语义区别。 元组是异构数据结构(即它们的条目具有不同的含义),而列表是同类序列。 元组有结构,列表有顺序。
使用这种区别使代码更加明确和易于理解。
一个例子是成对的页面和行号来引用书中的位置,例如:
my_location = (42, 11) # page number, line number
然后,您可以将其用作字典中的关键字来存储位置的注释。 另一方面,列表可用于存储多个位置。 当然,人们可能想要添加或删除列表中的位置,所以列表是可变的。 另一方面,从现有位置添加或移除项目是没有意义的 - 因此元组是不可变的。
可能会出现您想要更改现有位置元组内的项目的情况,例如在遍历页面行时。 但是元组的不变性迫使你为每个新值创建一个新的位置元组。 这看起来似乎很不方便,但像这样使用不可变的数据是价值类型和函数式编程技术的基石,它们可能具有相当大的优势。
在这个问题上有一些有趣的文章,例如“Python元组不仅仅是常量列表”或者“在Python中理解元组与列表”。 官方的Python文档也提到了这一点(“元组是不可变的,通常包含一个异构的序列......”)。
在像Haskell这样的静态类型语言中,元组中的值通常具有不同的类型,并且元组的长度必须是固定的。 在一个列表中,这些值都具有相同的类型,并且长度不固定。 所以差别非常明显。
最后是Python中的namedtuple,这是有道理的,因为元组已经被认为具有结构。 这强调了元组是类和实例的轻量级替代的想法。
列表和元组之间的区别
文字
someTuple = (1,2)
someList = [1,2]
尺寸
a = tuple(range(1000))
b = list(range(1000))
a.__sizeof__() # 8024
b.__sizeof__() # 9088
由于元组操作的规模较小,它会变得更快一些,但是除非您有大量元素,否则不会提及。
允许的操作
b = [1,2]
b[0] = 3 # [3, 2]
a = (1,2)
a[0] = 3 # Error
这也意味着你不能删除一个元素或排序一个元组。 但是,您可以将新元素添加到列表和元组中,唯一的区别是您将通过添加元素来更改元组的id
a = (1,2)
b = [1,2]
id(a) # 140230916716520
id(b) # 748527696
a += (3,) # (1, 2, 3)
b += [3] # [1, 2, 3]
id(a) # 140230916878160
id(b) # 748527696
用法
由于列表是可变的,因此它不能用作字典中的键,而可以使用元组。
a = (1,2)
b = [1,2]
c = {a: 1} # OK
c = {b: 1} # Error
如果你去散步,你可以在任何时刻在(x,y)元组中记下你的坐标。
如果你想记录你的旅程,你可以每隔几秒将你的位置追加到列表中。
但是你不能以相反的方式去做。
链接地址: http://www.djcxy.com/p/3855.html