这是 Python 列表的示例:
my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]
这是一个 Python 元组的例子:
my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")
Python 列表和元组的相似之处在于它们都是有序的值集合。除了使用括号“[ ... , ... ]”创建列表和使用括号“( ... , ... )”创建元组的细微区别之外,它们之间的核心技术“硬编码 Python 语法”区别是特定元组的元素是不可变的,而列表是可变的(......所以只有元组是可散列的,可以用作字典/散列键!)。这会导致它们如何使用或不能使用的差异(通过语法先验地强制执行)以及人们选择使用它们的方式的差异(被鼓励为“最佳实践”,后验,这就是 smart 程序员做的)。区分何时使用元组与何时使用列表的主要区别在于人们对元素顺序的含义。
对于元组,“顺序”仅表示用于保存信息的特定“结构”。在第一个字段中找到的值可以轻松切换到第二个字段,因为每个字段都提供跨两个不同维度或比例的值。它们为不同类型的问题提供答案,通常具有以下形式:对于给定的对象/主题,它的属性是什么?对象/主题保持不变,属性不同。
对于列表,“顺序”表示顺序或方向性。第二个元素必须在第一个元素之后,因为它根据特定和常见的比例或尺寸位于第二位。元素被视为一个整体,并且主要提供对单个问题的答案,通常是表单,对于给定的属性,这些对象/主题如何比较?属性保持不变,对象/主题不同.
在流行文化中不符合这些差异的人和程序员的例子不计其数,并且有不计其数的人可能会在主菜中使用沙拉叉。归根结底,这很好,两者通常都能完成工作。
总结一些更精细的细节
相似之处:
-
重复 - 元组和列表都允许重复
-
索引、选择和切片 - 元组和列表都使用括号内的整数值进行索引。因此,如果您想要给定列表或元组的前 3 个值,语法将是相同的:
>>> my_list[0:3]
[0,1,2]
>>> my_tuple[0:3]
[a,b,c]
-
比较和排序 - 两个元组或两个列表都通过它们的第一个元素进行比较,如果存在平局,则通过第二个元素进行比较,依此类推。前面的元素出现差异后,不再关注后面的元素。
>>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
True
>>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
True
差异: - 先验,根据定义
语法 - 列表使用 [],元组使用 ()
-
可变性 - 给定列表中的元素是可变的,给定元组中的元素是不可变的。
# Lists are mutable:
>>> top_rock_list
['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
>>> top_rock_list[1]
'Kashmir'
>>> top_rock_list[1] = "Stairway to Heaven"
>>> top_rock_list
['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']
# Tuples are NOT mutable:
>>> celebrity_tuple
('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
>>> celebrity_tuple[5]
'Dead'
>>> celebrity_tuple[5]="Alive"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
-
哈希表(字典) - 由于哈希表(字典)要求其键是可散列的,因此是不可变的,因此只有元组可以充当字典键,而不是列表。
#Lists CAN'T act as keys for hashtables(dictionaries)
>>> my_dict = {[a,b,c]:"some value"}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
#Tuples CAN act as keys for hashtables(dictionaries)
>>> my_dict = {("John","Wayne"): 90210}
>>> my_dict
{('John', 'Wayne'): 90210}
差异 - 使用中的后验
-
元素的同质性与异质性 - 通常列表对象是同质的,而元组对象是异质的。也就是说,列表用于相同类型的对象/主题(例如所有总统候选人,或所有歌曲,或所有跑步者),尽管它不是强制的),而元组更多用于异构对象。
李>
循环与结构 - 虽然两者都允许循环(对于 my_list 中的 x...),但仅对列表执行此操作才有意义。元组更适合结构化和呈现信息(位于 %s 中的 %s %s 是 %s,目前是 %s % ("John","Wayne",90210, "Actor","Dead"))