Python:(1,2,3)和[1,2,3]之间有什么区别,我应该什么时候使用它们?

在很多地方,(1,2,3)[1,2,3] 可以互换使用。

我应该什么时候使用一个或另一个,为什么?

0
额外 编辑
意见: 1

13 答案

该列表[1,2,3]是动态且灵活的,但灵活性以速度成本。

元组(1,2,3)是固定的(不可变的),因此速度更快。

0
额外
哪些操作元组更快?索引?
额外 作者 rafak,

元组是创建复合数据类型的一种快速\灵活的方式。 列表是对象列表的容器。

例如,您可以使用List来存储班级中的学生详细信息列表。

该列表中的每个学生的详细信息可以是包含他们的卷号,姓名和考试分数的三元组。

`[(1,'Mark',86),(2,'John',34)...]`

另外,因为元组是不可变的,所以它们可以用作字典中的键。

0
额外
有一个细微的警告,即一个元组只能包含其他不可变的可视为可散列的元素,例如:([],3)不可哈希; (“hi”,3)是可哈希的; <�(code>(([],3),3)不可哈希; (((),3),3)是可散列的。
额外 作者 Jegschemesch,

如果你能找到一个可以与元组一起工作的解决方案,那就使用它们,因为它强制不变性,这种方式会让你走上更多的功能路径。你几乎从不后悔走功能/不可改变的道路。

0
额外

正如其他人所提到的,列表和元组都是可以用来存储python对象的容器。列表是可扩展的,它们的内容可以通过赋值来改变,另一方面,元组是不可变的。

此外,列表不能用作字典中的键,而元组可以。

0
额外

无论何时我需要将一组项目传递给一个函数,如果我想让该函数不改变传入的值 - 我使用元组。

否则,如果我想具有更改值的功能,我使用列表。

如果您使用外部库并且需要将值列表传递给函数并且不确定数据的完整性,请始终使用元组。

0
额外

Python FAQ

列表和元组虽然在许多方面相似,但通常以基本不同的方式使用。元组可以被认为与Pascal记录或C结构类似;它们是相关数据的小集合,这些相关数据可能是作为一组进行操作的不同类型的。例如,笛卡尔坐标适当地表示为两个或三个数字的元组。     另一方面,列表更像其他语言的数组。他们倾向于持有不同数量的对象,所有对象都具有相同的类型,并且可以一一操作。

一般来说,按照惯例,你不会选择一个基于其(im)可变性的列表或元组。您会为完全不同的数据片段的小集合选择一个元组,这些数据片段中的成熟类将会过于重量级,并且会为您选择具有同类数据集合的任何合理大小的集合列表。

0
额外

(1,2,3) is a tuple and [1,2,3] is a list. You either of the two represent sequences of numbers but note that tuples are immutable and list are mutable Python objects.

0
额外

打开一个控制台并运行python。 尝试这个:

  >>> list = [1, 2, 3]     
  >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
     '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

As you may see the last on the last line list have the following methods: 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'

现在尝试相同的元组:

>>> tuple = (1, 2, 3)
>>> dir(tuple)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

列表方法中只有'count'和'index'出现在这里。

这是因为元组是不可变的,他们不支持任何修改。相反,他们在内部实施时更简单快捷。

0
额外

(1,2,3) is a tuple while [1,2,3] is a list. A tuple is an immutable object while a list is mutable.

0
额外

[1,2,3] is a list.

(1,2,3) is a tuple and immutable.

0
额外

元组的概念具有高度的表达性:

  • Pragmatically, they are great for packing and unpacking values (x,y=coord).

  • In combination with dictionaries (hash tables), they allow forms of mapping that would otherwise require many levels of association. For example, consider marking that (x,y) has been found.

    // PHP
    if (!isset($found[$x])) {
        $found[$x] = Array();
        $found[$x][$y] = true;
    } else if (!isset($found[$x][$y])) {
        $found[$x][$y] = true;
    }
    
    # Python
    found[(x,y)] = True # parens added for clarity
    
  • Lists should be used with the expectation of operations on its contents (hence the various mentions of immutability). One will want to pop, push, splice, slice, search, insert before, insert after, etc with a list.

  • Tuples should be a low-level representation of an object, where simple comparisons are made, or operations such as extracting the n'th element or n elements in a predictable fashion, such as the coordinates example given earlier.

  • Lastly, lists are not hashable, so the type of mapping done with dictionaries (hash tables in Perl, associative arrays in PHP) must be done with tuples.

    Here's a simple example of tuples and dictionaries, together at last:

    """
    couple is a tuple of two people
    doesLike is a dictionary mapping couples to True or False
    """
    couple = "john", "jane"
    doesLike = dict()
    doesLike[couple] = True
    doesLike["jane", "john"] = False # unrequited love :'(
    
0
额外
  • 元组可能代表字典中的一个键,因为它是 不可变的。
  • 如果您的数据集合没有,则使用列表 需要随机访问。
0
额外

(1,2,3)和[1,2,3]可以在罕见情况下互换使用。

所以(1,2,3)是一个元组,并且是不可变的。您希望进行的任何更改都需要覆盖该对象。

[1,2,3]是一个列表,元素可以被添加和删除。

列表比元组具有更多特征。

0
额外