列表与元组的区别

相同点:都是序列类型

回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作

>>> foos = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> foos[0:10:2][0, 2, 4, 6, 8]

>>> bars = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)>>> bars[1:10:2](1, 3, 5, 7, 9)

两者的操作如此相似,Python 为什么还要设计一种叫 tuple 的类型出来呢?这就要从它们的不同之处来寻找答案。

不同点一:不可变 VS 可变

两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。

列表特有方法:

>>> foo = [2,3,1,9,4]>>> foo.sort() # 排序>>> foo.insert(5,10) # 插入>>> foo.reverse()  # 反转>>> foo.extend([-1, -2]) # 扩展>>> foo.remove(10)  # 移除>>> foo.pop()  # 弹出最后一个元素>>> foo.append(5)  # 追加

所有的操作都基于原来列表进行更新,而 tuple 作为一种不可变的数据类型,同样大小的数据,初始化和迭代 tuple 都要快于 list

>python -m timeit "[1,2,3,4,5]"10000000 loops, best of 3: 0.123 usec per loop

>python -m timeit "(1,2,3,4,5)"100000000 loops, best of 3: 0.0166 usec per loop

同样大小的数据,tuple 占用的内存空间更少

>>> foo = tuple(range(1000))>>> bar = list(range(1000))>>> foo.__sizeof__()8024>>> bar.__sizeof__()9088

原子性的 tuple 对象还可作为字典的键

>>> foo = (1,(2,3))>>> d = {foo: 1}

>>> bar = (1, [2,3]) # 非原子性tuple,因为元组中包含有不可哈希的list>>> d = {bar: 1}Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: unhashable type: ‘list‘

不同点二:同构 VS 异构

tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。

person = ("zhangsan", 20, 180, 80)

比如记录坐标上的某个点

point = (x, y)

而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型

["zhangsan", "Lisi", "wangwu"]

再比如 list 存放的多条用户记录

[("zhangsan", 20, 180, 80), ("wangwu", 20, 180, 80)]

数据库操作中查询出来的记录就是由元组构成的列表结构。

因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用。

时间: 2024-10-05 03:44:40

列表与元组的区别的相关文章

python 列表的操作(添加删除)列表和元组的区别

python 列表的操作(添加删除) 1.列表的添加:append 和extend append 和extend 的区别:  append只能追加1个元素  ,extend可以追加多个 >>> lst1=[1,2,3,4] >>> lst1.append(5) >>> lst1 [1, 2, 3, 4, 5] >>> lst1.extend([6,7,8]) >>> lst1 [1, 2, 3, 4, 5, 6, 7

列表和元组的区别、使用方法

一.二者区别 列表: 1.可以增加列表内容     append 2.可以统计某个列表段在整个列表中出现的次数 count 3.可以插入一个字符串,并把整个字符串的每个字母拆分当作一个列表段追加到列表当中 extedn 4.可以查询某个列表段在整个列表的位置 index 5.可以在指定位置插入一个列表段 insert 6.可以删除列表的最后一个列表段 pop 7.可以删除指定列表中的某个列表段 remove 8.可以正向反向排序 reverse 9.可以按字母或数字排序 sort 10.定义列表

python中数组,列表,元组的区别、定义、功能

准确的来说,在python中是没有数组类型的,python中取而代之的是列表和元组.列表比元组好用,因为元组一旦定义就没法修改.而列表不仅可以和数组一样按索引访问,还有一堆的功能. 列表: (1)添加 往列表a的尾部追加元素:a.append(i) 往列表a中的任何位置追加元素:a.insert(i,elem),其中i表示索引位置,elem表示元素. (2)删除: 删除指定位置的元素:del a[i] 删除列表中的元素: a.remove(elem) 删除列表尾部的元素(有点像栈pop哈哈):

列表和元组的区别

List和Tuple 这就是Java或C中的数组.它是一个容器,能用来顺序的,以整数索引方式检索, 存储一组对象.List用[]来表示,如[1, 2, 3]就是一个List:而Tuple用()来表示,如(3, 4, 5)就是一个Tuple. 它们的区别在于List是可变的: 而Tuple是不可变的.也就是说不可以增,删和改. 索引方式除了与Java一样的以一个整数下标方式外,还可以指定开始,结束和步长,和使用负索引来分割List

零基础学python-2.7 列表与元组

其实,可以把列表和元组看成普通的数组,但是这个数组可以存储不同的数据类型(对象) 列表和元组的区别   列表 元组 使用的符号 [] () 元素数量 可变 不可变 修改元素 不可以 可以 如果大家有编程基础,列表就像java里面的List,元组就像java里面的数组,不过这个数组是只读的 下面给大家举个例子: 列表可以使用下标来读取或者修改元素 元组只可以通过下标读取元素,不可以修改元素 元组可以像字符串一样使用切片操作符来截取元素,但是有个区别就是,如果下标为负数或者超过元组长度,不显示 这节

python数据类型:列表、元组、字典、集合

列表 一.列表基础  前言: 数组:把一堆同类型的数据挨个放在一起 列表:把一堆任意类型的数据挨个放在一起(基于变量没有类型,列表中的数据也没有类型的) 语法: list名=[value1,value2,value3,.....] 1.中括号 :2.数据间用逗号隔开; 特点:有序,数据可重复,数据类型可以不一致,可嵌套使用 示例: list=[1,'22',"龙猫",3.14]    #各种数据类型 list=[1,'22',"龙猫",3.14,[1,2,3]]  

列表与元组——自兴人工智能

在讲解列表与元组之前我们先了解Python中所有序列都可以进行哪一些特定操作? 包括索引,分片,序列相加,乘法,成员资格,长度,最大值,最小值  一.列表 1, 4 更新列表 一些序列中没有而元素中有的方法,这些方法的作用都是更新列表,有元素赋值.元素删除.分片赋值.和列表赋值 1).元素赋值 eg:a=[1,2,3,4] a[1]=10 print a 1,10,3,4 2).增加元素 eg:a=[1,2,3,4] a.append(5) print a [1,2,3,4,5] 3).删除元素

[python01] python列表,元组对比Erlang的区别总结

数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构. python最基本的数据结构是sequence(序列):6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象. 对比归纳:列表,元组在Erlang与python中的区别: 1. 通用操作: Python的列表更像是C中的数组,但是比那更灵活,和Erlang的列表大有不同. 1.1 python列表索引从0开始并可以是负数.可以使用 >>>nu

python中列表和元组的使用方法和区别

一.二者区别 列表: 1.可以增加列表内容     append 2.可以统计某个列表段在整个列表中出现的次数 count 3.可以插入一个字符串,并把整个字符串的每个字母拆分当作一个列表段追加到列表当中 extedn 4.可以查询某个列表段在整个列表的位置 index 5.可以在指定位置插入一个列表段 insert 6.可以删除列表的最后一个列表段 pop 7.可以删除指定列表中的某个列表段 remove 8.可以正向反向排序 reverse 9.可以按字母或数字排序 sort 10.定义列表