Python中列表和元组有什么区别?

2024-04-19 10:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

哪个更有效?它们的典型用途是什么?在


Tags: 用途典型
3条回答

列表是可变的,您可以向其添加元素。元组不是,这意味着它(稍微)更有效率。元组也是散列的,因此可以用作字典中的键。在

this。在

列表是可变的(可以更改的),元组是不可变的。典型用法:听起来很老套,但当需要更改值时,可以使用列表。元组通常更有效,因为它们是不变性的(除非您像使用列表一样使用它们并大量复制它们…)

列表是可变的序列,有很多方法(包括变异的和非变异的方法),它们最常被用作通用容器(它们的项可以是任何类型的对象,尽管有时认为列表具有相同类型或等效使用的项被认为是更好的样式)。在

元组是不可变的序列,只有很少的方法(都是非变异的特殊方法),当您需要将容器用作集合中的项或dict中的键时,通常会使用这些方法(尽管这些项也必须是不可变的——例如字符串、数字或其他嵌套的元组,才能起作用)。它们的项可以是任何类型的对象,元组具有许多不同类型的项是非常正常的。在

在少数情况下,元组或列表都能起到同样的作用,在这种情况下,元组更小、构建速度更快的事实可以用来改变对元组有利的决定。例如,当一个函数需要返回多个结果时,使用它是最正常的

return fee, fie, foo, fum

也就是说,返回一个包含四个相关项的元组,而不是

^{pr2}$

也就是说,返回一个包含四个项目的列表——除了性能(小的提高),“returna tuple”的常见习惯用法还处理了这样一个问题:返回的多个结果通常是不是的相同类型,也不是可互换的类型,因此,从文体上讲,使用list可能被认为是一个更可疑的选择。在

tuple的一个有用的变体是它的子类型collections.namedtuple(需要Python2.6或更高版本),它允许您通过名称(使用属性语法)和索引(通常的方式)访问项。例如,在模块顶部有一个import collections,上面的return语句可能会变成。。。在

freturn = collections.namedtuple('freturn', 'fee fie foo fum')

def f():
  ...
return freturn(fee, fie, foo, fum)

现在,f()的调用者可以像以前一样使用它的返回值作为元组,但是会获得更好的选择,比如…:

r = f()
print r.fie

而不是不那么直接的清晰易读

print r[1]

需要注意的是,与直接使用元组相比,使用collections.namedtuple生成的命名元组子类本质上没有额外的开销,或者,正如文档所说

they are lightweight and require no more memory than regular tuples.

相关问题 更多 >