Python列表和元组

最近都在用Python写一些脚本,用到一些基础的数据结构,今天来聊一聊Python中最常见的两种数据结构:列表(list)和元组(tuple),这两种数据结构到底有哪些区别呢?

一、共同点

1、列表和元组,都是一个可以放置任意数据类型的有序集合。

比如:

l = [1, 2, ‘hello‘, ‘world‘] # 列表中同时含有int和string类型的元素 l
[1, 2, ‘hello‘, ‘world‘]
tup = (‘jason‘, 22) # 元组中同时含有int和string类型的元素 tup
(‘jason‘, 22)

2、列表和元组都支持负数索引,-1表示最后一个元素,-2表示倒数第二个 元素,以此类推。

l = [1, 2, 3, 4]
l[-1]
4

tup = (1, 2, 3, 4)
tup[-1]
4

3、列表和元组都支持切片操作。比如:

list = [1, 2, 3, 4]
l[1:3] # 返回列表中索引从1到2的子列表 [2, 3]

tup = (1, 2, 3, 4)
tup[1:3] # 返回元组中索引从1到2的子元组 (2, 3)

4、列表和元组都可以随意嵌套。比如:

l = [[1, 2, 3], [4, 5]] # 列表的每一个元素也是一个列表

tup = ((1, 2, 3), (4, 5, 6)) # 元组的每一个元素也是一元组

5、列表和元组相互转换.比如:

list((1, 2, 3))
[1, 2, 3]

tuple([1, 2, 3])
(1, 2, 3)

6、相同的内置函数。

l = [3, 2, 3, 7, 8, 1]l.count(3)
2
l.index(7)
3
l.reverse()
l
[1, 8, 7, 3, 2, 3]
l.sort()
l[1, 2, 3, 3, 7, 8]

tup = (3, 2, 3, 7, 8, 1)
tup.count(3)
2
tup.index(7)
3
list(reversed(tup))
[1, 8, 7, 3, 2, 3]
sorted(tup)
[1, 2, 3, 3, 7, 8]

二、区别点

1、列表是动态,元组是静态

  • 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。
  • 元组是静态的,长度大小固定,无法增加删减或者改变(immutable)。

下面举例说明下,list中可以随意更改指定位置的值,而元组不能。

l = [1, 2, 3, 4]
l[3] = 40 # 和很多语言类似,python中索引同样从0开始,l[3]表示访问列表的第四个元素 l
[1, 2, 3, 40]

tup = (1, 2, 3, 4)
tup[3] = 40
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  TypeError: ‘tuple‘ object does not support item assignment

元组想要添加一个值,需要新建一个元组,然后将旧元素拷贝过去。而列表可以直接在后面添加即可。

tup = (1, 2, 3, 4)
new_tup = tup + (5, ) # 创建新的元组new_tup,并依次填充原元组的值 new _tup
(1, 2, 3, 4, 5)

l = [1, 2, 3, 4]
l.append(5) # 添加元素5到原列表的末尾 l
[1, 2, 3, 4, 5]

2、列表和元组存储方式的差异。

先看一个例子

l = [1, 2, 3]
l.__sizeof__()
64

tup = (1, 2, 3)
tup.__sizeof__()
48

对列表和元组,我们放置了相同的元素,但是元组的存储空间,却比列表要少16字节。由于列表是动态的,所以它需要存储指针,来指向对应的元素(上述例子中,对于int型,8字节),

而额外存储分配的长度大小(8字节),用于实时追踪列表 空间的使用情况,当空间不足时,及时分配额外空间。

l = []
l.__sizeof__() // 空列表的存储空间为40字节
40
l.append(1)
l.__sizeof__()
72 // 加入了元素1之后,列表为其分配了可以存储4个元素的空间 (72 - 40)/8 = 4
l.append(2)
l.__sizeof__()
72 // 由于之前分配了空间,所以加入元素2,列表空间不变

从上面的例子看到,为了减小每次增加/删减操作时空间分配的 开销,Python每次分配空间时都会额外多分配一些,这样的机制(over-allocating)保证了其操作的高效 性:增加/删除的时间复杂度均为O(1)。

但是对于元组,情况就不同了。元组长度大小固定,元素不可变,所以存储空间固定。

三、使用场景

  1. 如果存储的数据和数量不变,比如你有一个函数,需要返回的是一个地点的经纬度,然后直接传给前端 渲染,那么肯定选用元组更合适。
  2. 如果存储的数据或数量是可变的,比如社交平台上的一个日志功能,是统计一个用户在一周之内看了哪 些用户的帖子,那么则用列表更合适。

另外,极客时间 Python技术核心与实战 课程内容真的不错。值得去看下,在这里有免费文档可以下载。https://home.ctfile.com/#item-files/action-index/folder_id-4373423


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/xiaodekaixin/p/11437659.html

时间: 2024-11-09 06:56:25

Python列表和元组的相关文章

Python列表、元组、字典和字符串的常用函数

Python列表.元组.字典和字符串的常用函数 列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object

python列表,元组的操作

python的列表是用于存放一组数据,表示形式 用 [ ]来表示 1,列表的常用方法: names = ['!alex', 'eric', 'rain', '2kity'] names.append('knochkapoor') #增加一个元素 names.count('alex') #统计alex数量 names.insert(0,'jlliu') #在第一个位置插入'julliu' names.remove('jlliu') #删除'jlliu' names.pop() #不加参数默认删除最

python列表和元组的方法和属性

python序列的共性 python序列包括列表和元组,序列都有索引,第一个元素索引为0,序列都可以进行索引.加.乘.切片.检查成员. python列表 列表是最常用的数据类型之一,通过[,,,]建立,可以给变量赋值空列表[].列表的数据项可以是不同类型的,可以嵌套. 列表的索引和字符串操作一样,同样可以截取例如a[1:2] / a[1:] / a[:3] 列表的更新: 1.修改:通过索引直接赋值来修改列表中的值. 2.新增:通过list.append(),在末尾处添加元素. 3.删除: A.通

第七节:python列表、元组、字典、集合

python个人笔记,纯属方便查询: ################################## ################################## ################################## i=['car','clothes','ipone']      #语法 i         #查看所有的元素 i[0]     #取第一个 i[1]     #取第二个 i[-1]    #取最后一个  i[0:10]   #取一个到第九个  i[-

python 列表、元组 详解

python中有6种序列的内置类型,分别为:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象 列表和元组是最常见两种类型. 下面将以列表(list)和元组(tuple)为例对序列操作进行详细的讲解: 一.列表(list) 列表序列操作有:索引.切片.修改.追加.插入.删除.扩展.统计.排序(翻转).获取下标.拷贝 1. 索引 (list[i]) 列表的索引序号(又称为下标)如下图所示,该序列一共拥有n个元素, 从左到右索引是从 0 开始,  n-1 为最后一个元素 从

认识Python 列表和元组

列表用方括号   l=[['xyz',123], 'abc', 3140000000.0, (23+1.3j), 'ddd'] 元组用圆括号   t=(['xyz', 123],'abc', 3140000000.0, (23+1.3j), 'ddd') 这两个序列类型很相似,一开始没有想明白python为什么要设置两个相似的序列类型,在看完<python核心编程>的讲解后有了进一步的认识,特做此笔记,重点讲述不同之处及元组的不可变性质. 二者的相似处: 元组的对象和序列类型操作符.内建函数和

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

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

python列表,元组

python列表: 列表的格式为: list=["index1","index2",1,2] #list为列表名,index1,index2,1,2为列表元素. 上面就是一个简单的列表,那如何获取,输出列表中的元素呢?: #列表每个元素都有个下标,根据下标进行获取列表中的元素值: list=["index1","index2",1,2] print(list[1]) index2    #打印结果 #列表元素下标从0开始计算,

python 列表,元组,字符串方法和属性

python序列包含列表[].元组().字符串三种 -------列表-------------- 一.列表基本内容 1.建立:a=[1,2,3,5],通过[ , ,], >>>b=[6,7,8,9] 2.索引:a[0]=1 3.切片:a[0:2],a[:] 4.删除:del a[索引]; a.remove(5) :a.pop(索引),会返回删除的值 5.列表操作符: ‘+’表示拼接列表:*表示重复 >>> a+b [1, 2, 3, 5, 6, 7, 8, 9] &g

python 列表、元组、字典总结

转自:http://blog.csdn.net/yasi_xi/article/details/38384047 列表,元组,字典属于python中的三种内建的数据结构 1.列表 list是处理一组有序的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的项目,列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表.一旦你创建了一个列表,你就可以添加,删除,或者搜索列表中的项目.由于可以增加或删除项目,因此可以说列表是可变的数据类型,即这种类型是可以被改变的,并且列表时