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


当前回答

列表用于循环,元组用于结构。“%s %s”%元组。

列表通常是同构的,元组通常是异构的。

列表是可变长度的,元组是固定长度的。

其他回答

关键的区别是元组是不可变的。这意味着一旦创建了元组,就不能更改其中的值。

因此,如果您需要更改值,请使用List。

元组的好处:

性能略有改善。 元组是不可变的,可以用作字典中的键。 如果你不能改变它,其他人也不能,也就是说你不需要担心任何API函数等改变你的元组没有被要求。

PEP 484——类型提示说元组元素的类型可以单独类型化;这样你就可以说Tuple[str, int, float];但是一个带有list类型类的列表只能接受一个类型参数:list [str],这暗示了两者的区别实际上是前者是异构的,而后者本质上是同构的。

此外,标准库通常使用tuple作为这些标准函数的返回值,而C将返回结构体。

首先,它们都是Python中的非标量对象(也称为复合对象)。

元组,有序的元素序列(可以包含任何没有混叠问题的对象) 不可变(tuple, int, float, str) 使用+进行连接(当然会创建一个全新的元组) 索引 切片 Singleton(3,) # ->(3)而不是(3)# -> 3 List(其他语言中的数组),值的有序序列 可变的 单例[3] 克隆new_array = origin_array[:] 列表推导式[x**2 for x in range(1,7)]给出 [1,4,9,16,25,36](不可读)

使用list还可能导致别名错误(两条不同的路径 指向同一对象)。

正如人们已经在这里回答的那样,元组是不可变的,而列表是可变的,但是使用元组有一个重要的方面我们必须记住

如果元组中包含列表或字典,即使元组本身是不可变的,也可以更改这些列表或字典。

例如,假设我们有一个元组,其中包含一个列表和一个字典为

my_tuple = (10,20,30,[40,50],{ 'a' : 10})

我们可以将列表的内容更改为

my_tuple[3][0] = 400
my_tuple[3][1] = 500

new tuple看起来像什么

(10, 20, 30, [400, 500], {'a': 10})

我们还可以更改tuple as内的字典

my_tuple[4]['a'] = 500

这将使整个元组看起来像

(10, 20, 30, [400, 500], {'a': 500})

发生这种情况是因为list和dictionary是对象,这些对象没有改变,但它所指向的内容。

因此,元组保持不变,没有任何异常

列表是可变的,元组是不可变的。 考虑一下这个例子。

a = ["1", "2", "ra", "sa"]    #list
b = ("1", "2", "ra", "sa")    #tuple

现在改变list和tuple的索引值。

a[2] = 1000
print a     #output : ['1', '2', 1000, 'sa']
b[2] = 1000
print b     #output : TypeError: 'tuple' object does not support item assignment.

因此证明下面的代码是无效的元组,因为我们试图更新一个元组,这是不允许的。