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

时间:2020-03-05 18:37:40  来源:igfitidea点击:

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

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

解决方案

回答

列表1,2,3是动态的和灵活的,但这种灵活性是以速度为代价的。

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

回答

从Python常见问题解答中:

Lists and tuples, while similar in many respects, are generally used in fundamentally different ways. Tuples can be thought of as being similar to Pascal records or C structs; they're small collections of related data which may be of different types which are operated on as a group. For example, a Cartesian coordinate is appropriately represented as a tuple of two or three numbers.
  
  Lists, on the other hand, are more like arrays in other languages. They tend to hold a varying number of objects all of which have the same type and which are operated on one-by-one.

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

回答

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

例如,我们可以使用"列表"在班级中存储学生详细信息列表。

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

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

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

回答

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

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

回答

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

回答

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

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

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

回答

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

  • 实用上,它们非常适合打包和解包值(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 :'(