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

标签 python list tuples

哪个更有效率?每个的典型用途是什么?

最佳答案

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

元组是不可变的序列,只有很少的方法(所有非可变的特殊方法),当您需要不可变性以将容器用作集合中的项目或字典中的键时,最常使用它们(尽管项目也必须是不可变的——例如字符串、数字或其他嵌套元组,才能工作)。它们的项目可以是任何类型的对象,并且元组具有许多不同且不同类型的项目是完全正常的。

在少数情况下,元组或列表的效果都一样,在这种情况下,元组更小且构建速度更快的事实可以用来影响支持元组的决定.例如,当一个函数需要返回多个结果时,使用它是最正常的

return fee, fie, foo, fum

即,返回一个包含有问题的四个项目的元组,而不是

return [fee, fie, foo, fum]

即,返回包含四个项目的列表——除了(小幅提升)性能之外,“返回元组”这一常见习惯用法还解决了通常返回的多个结果不是 相同且不可互换的类型,因此,从风格上讲,无论如何使用列表可能被认为是一个更可疑的选择。

tuple 的一个有用变体是它的子类型 collections.namedtuple (需要 Python 2.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.

关于python - Python 中的列表和元组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3357984/

相关文章:

python - python中两个元组之间的区别是什么?

python - 在python中获取实例的标识符名称

python - 将数据框与 Excel 中的行进行比较

arrays - 我可以将数组访问器添加到通用 TypeScript 类吗?

python - StructType 不能接受 pyspark 中的对象 float

python - 在需要列表或元组的情况下传递参数时要传递什么?

python - Django静态文件404错误

python - Flask Json 请求 400 记录?

python - 计算满足 if 语句的元素并在 Python 的列表理解中使用此计数器?

python - 引用 SQL 结果以构建 Python 列表的最佳实践?