1.列表和元组的基础

列表和元组都是一个可以放置任意数据类型的有序合集。(在绝大多数编程语言中,集合的数据类型必须一致。不过,对于python的列表和元组来说,并无此要求)

2.列表与元组的区别

1)列表是动态的,长度大小不固定,可以随意的增加、删减或者改变元素。

2)元组是静态的,长度大小固定,无法增加、删减或者改变。

3.列表和元组的基本操作和注意事项

1)首先,和其他语言不同,Python中的列表和元组都支持负数索引,-1表示最后一个元素,-2表示倒数第二个元素,以此类推。

2)列表和元组都支持切边操作

3)列表和元组都可以随意嵌套

4)两者可以通过list()和tuple()函数相互转换:

list((1,2.3))        #[1,2.3]

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

5)列表和元组常用的内置函数:

l = [3,2,3,7,8,1]
l.count(3)
#2; count(item)表示统计列表/元组中item出现的次数。
l.index(7)
#3; index(item)表示返回列表/元组中item第一次出现的索引
l.reverse()
#[1,8,7,3,2,3]; list.resverse()表示原地倒转列表
l.sort()
#[1,2,3,3,7,8]; list.sort()表示列表排序(注意元组没有内置这两个函数)

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

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

tup = (1,2,3)
print(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,列表空间不变
l.append(3)
l.__sizeof__()
72 // 同上
l.append(4)
l.__sizeof__()
72 // 同上
l.append(5)
l.__sizeof__()
104 // 加入元素 5 之后,列表的空间不足,所以又额外分配了可以存储 4 个元素的空间

上面的例子,大概描述了列表空间分配的过程。我们可以看到,为了减少每次增加/删除操作时空间分配的开销,Python每次分配空间时都会额外多分配一些,这样的机制(over—allocating)保证了其操作的高效性:增加/删除的时间复杂度均为O(1)。

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

列表和元组的性能

通过学习列表和元组存储方式的差异,我们可以得出结论:元组要比列表更加轻量级一些,所以总体上来说,元组的性能速度要略优于列表。

另外,Python会在后台,对静态数据做一些资源缓存(resource caching)。通常来说,因为垃圾回收机制的存在,如果一些变量不被使用,Python就会回收它们所占用的内存,返还给操作系统,以便其他变量或其他应用使用。

但是对于一些静态变量,比如元组,如果它不被使用并且占用空间不大时,Python会暂时缓存这部分内存。这样,下次我们在创建同样大小的元组时,Python就可以不用再向操作系统发出请求,去寻找内存,而是可以直接分配之前缓存的内存空间,这样就能大大加快程序的运行速度。

转载于:https://www.cnblogs.com/mylearning-log/p/10872935.html

python — 列表与元组相关推荐

  1. 十二、深入Python列表和元组

    @Author :Runsen 上面四篇文章总结了Python的基础. 在Pthon中数据结构是非常重要的,所以下面将深入Pyhon数据结构 Python列表和元组总结 文章目录 什么是列表和元组 列 ...

  2. python两个元组相加_《第5章 Python 列表与元组》5.1.3 序列相加(Adding)!

    <高中信息技术 Python编程> 教学案<第5章 Python 列表与元组> 5.1.3 序列相加(Adding)! 06:15 1 #使用加号可以进行序列的连接操作,输入如 ...

  3. python 列表、元组、集合、字典、循环遍历数据结构

    python 列表.元组.集合.字典.数据结构的循环(整理自python文档) 列表-list-用方括号标注,逗号分隔的一组值 list 的 方法 对list添加.插入.删除.查找.排列.翻转 lis ...

  4. 任意长度的python列表最后一个元素索引_任意长度的 Python 列表、元组和字符串中最后一个元素的下标为 ________ 。_学小易找答案...

    [填空题]已知 x = [3, 5, 7] ,那么表达式 x[10:] 的值为 ____________ . [填空题]表达式 [x for x in [1,2,3,4,5] if x<3] 的 ...

  5. 任意长度的python列表最后一个元素索引_任意长度的Python列表、元组和字符串中最后一个元素的下标为...

    [填空题]Python内置函数__用来返回序列中的最小元素 [填空题]表达式 list(range(5)) 的值为 [填空题]表达式 int(4**0.5) 的值为 [填空题]表达式 3 or 5 的 ...

  6. 任意长度的python列表_任意长度的Python列表、元组和字符串中最后一个元素的索引为...

    任意长度的Python列表.元组和字符串中最后一个元素的索引为 答:-1 什么是软件工程? 答:百度定义:软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序设计语言 ...

  7. python列表和元组

    python列表和元组 1.列表 列表是Python中内置的有序可变序列,列表的所有元素放在一对中括号"[]"中,并使用逗号隔开,列表中元素的类型可以相同也可以不同. (1)列表的 ...

  8. Python列表和元组的详细区别

    文章目录 Python列表和元组的详细区别 一.列表和元组的区别 二.列表(List) 三.元组(Tuple) Python列表和元组的详细区别 一.列表和元组的区别 列表是动态数组,它们可变且可以重 ...

  9. python列表与元组和java_Python列表和元组的相同点和不同点是什么

    相同点:属于有序序列.可以强制转换.使用len()统计元素个数.使用count()统计指定元素的出现次数.不同点:1.元组类型为tuple,列表类型为list:2.元组不能修改,列表可以根据索引来修改 ...

  10. c 提取引号中间的字符串_Python | 一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力. 列表.元组.字符串都属于序列 ...

最新文章

  1. GAN的理解与TF的实现
  2. php函数substr_replace中文乱码的替代解决方法
  3. 代码优化从数据库里查数据
  4. Linux 系统关于应该把程序安装在目录 /usr 还是目录 /usr/local 下的思考
  5. Android Studio 3.0 下 Cordova 打包时 Gradle 兼容性问题解决
  6. SpringCloud Consul注册中心介绍及配置使用
  7. 周剑:国产商业智能 BI 这 20 年(1997~2017)
  8. 软件测试简历没有项目经验怎么写?
  9. 【WinMTR】Windows上winmtr的安装使用方法
  10. 交点处批量性一次打断lisp_cad批量交点打断.VLX
  11. 中国通胀真相:美国向全球转嫁经济调整成本
  12. Mesh Shading
  13. 计算机网络校招面试题总结
  14. 2018ChinaJoy万代南梦宫展区的高光时刻
  15. python01串_python初学者日记01(字符串操作方法)
  16. 从根本上理解 机器学习中真实值、观测值、预测值的区别
  17. 【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day9
  18. HDMI原理详解以及时序流程(视频是三对差分信号,音频Audio是PCM级(无压缩)传输,包含在数据包内,依靠协议规定采样)HDMI可以传输RGB与YUV两种格式
  19. GNSS Interface Control Document报文协议文档
  20. 导入依赖butterknife 10.1.0 报错 Attribute application@appComponentFactory ......

热门文章

  1. VB100八月测试:Vista成众安全厂商梦魇 国内仅可牛通过测试
  2. Schmid Telecom选择StoreAge SVM实现数据镜像保护
  3. 用纸作出来的艺术品 漂亮!
  4. 让FX1.1的NotifyIcon支持BalloonTip(2)
  5. linux添加固件到内核,树莓派4 BCM43455 NVRAM添加到Linux固件Git
  6. NASM汇编程序中的宏定义
  7. C语言条件编译及编译预处理阶段
  8. easyNeurons 神经网络入门教程
  9. 汇编语言--可屏蔽中断
  10. shell命令的文本计算