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

Translate

在很多地方(1,2,3)(一个元组)和[1,2,3](列表)可以互换使用。

什么时候应该使用其中一个,为什么?

This question and all comments follow the "Attribution Required."

所有的回答

Translate

来自Python常见问题:

列表和元组在许多方面都相似,但通常以根本不同的方式使用。元组可以被认为类似于Pascal记录或C结构。它们是相关数据的小集合,这些数据可能属于不同类型,它们作为一组进行操作。例如,笛卡尔坐标适当地表示为两个或三个数字的元组。

另一方面,列表更像其他语言中的数组。它们倾向于容纳不同数量的对象,所有这些对象都具有相同的类型并且可以一对一地进行操作。

通常,按照惯例,您不会仅基于列表(不可变性)来选择列表或元组。您将为完全不同的数据的小型集合选择一个元组,而完整的类将过于繁重,而对于具有合理数据集的任何合理大小的集合,则选择一个列表。

来源
Translate

列表[1,2,3]是动态和灵活的,但是灵活性要付出一定的代价。

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

来源
HS.
Translate

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

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

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

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

同样,由于元组是不可变的,因此它们可以用作字典中的键。

来源
Translate

元组的概念具有很高的表达力:

  • 实用上,它们非常适合打包和解包(x,y=coord).

  • 与字典(哈希表)结合使用时,它们允许映射形式,否则将需要许多级别的关联。例如,考虑标记已找到(x,y)。

    // 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
    
  • 使用列表时应期望对其内容进行操作(因此,各种提及不变性的内容)。一个人会想要弹出,推入,拼接,切片,搜索,在列表前插入,在列表后插入等。

  • 元组应该是对象的低级表示,可以进行简单的比较,也可以是诸如以可预测的方式提取第n个元素或第n个元素的操作,例如前面给出的坐标示例。

  • 最后,列表不可散列,因此使用字典(Perl中的哈希表,PHP中的关联数组)完成的映射类型必须使用元组完成。

    这是最后一个简单的元组和字典示例:

    """
    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 :'(
    
来源
Dora Lee
Translate

[1, 2, 3]是一个可以在其中添加或删除项目的列表。
(1, 2, 3)是一个元组,在其中定义后就无法进行修改。

来源
cnu
Translate

每当我需要将一组项目传递给函数时,如果我希望函数不更改传入的值,则使用元组。

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

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

来源
JSN
Translate

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

同样,列表不能用作字典中的键,而元组则可以。

来源
Translate

打开控制台并运行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']

如您所见,最后一行列表中的最后一个具有以下方法:“追加”,“计数”,“扩展”,“索引”,“插入”,“弹出”,“删除”,“反向”,“排序”

现在对元组尝试相同的方法:

>>> 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']

只要“计数”和“索引”从列表方法出现在这里。

这是因为元组是不可变的,并且不支持任何修改。相反,它们在内部实现中更加简单快捷。

来源
Translate
  • 元组可能是字典中的键,因为它是不可变的。
  • 如果您有不需要随机访问的数据集合,请使用列表。
来源
Translate

如果您找到了适用于元组的解决方案,请使用它们,因为它会强制不变性,从而使您朝着更实用的方向发展。您几乎永远不会后悔沿着功能/不变的道路前进。

来源
Translate

[1,2,3]是一个列表。

(1,2,3)是一个元组并且是不变的。

来源
Translate

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

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

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

列表具有比元组更多的功能。

来源
Translate

(1,2,3)是一个元组[1,2,3]是一个列表。当列表可变时,元组是不可变的对象。

来源
Translate

(1,2,3)是一个元组,[1,2,3]是一个列表。两者中的任何一个都代表数字序列,但请注意,元组是不可变的,而list是可变的Python对象。

来源
Translate

(1,2,3)-tuple [1,2,3] -list列表是可变的,可以在其上执行各种操作,而tuple是不可变的,无法扩展。我们无法一次添加,删除或更新tuple中的任何元素它被创建。

来源
下一个问题:
LISP宏可以走多远?