专题4:python(list&tuple区别)&(索引和切片的理解)

本文详细介绍了Python中列表(List)和元组(Tuple)的主要区别,包括它们的存储方式、初始化时间以及索引和切片操作。元组作为不可变序列,其内存占用更小,初始化速度快,常用于返回值和作为映射键。在访问速度和不可变性方面,元组优于列表。了解这些差异有助于在编程中选择合适的数据结构。
摘要由CSDN通过智能技术生成

这是在python面试中会经常问的一个问题

List和Tuple的区别

元组和列表最大的一个区别就是:是否可以修改,列表是可以修改的,元组不支持修改(这是面试必须点出的)

可以理解为:tuple元组是一个只读版本的列表

存储方式

listdemo = []
>>> listdemo.__sizeof__()
40
>>> tupleDemo = ()
>>> tupleDemo.__sizeof__()
24

可以看到,对于列表和元组来说,虽然它们都是空的,但元组却比列表少占用 16 个字节,这是为什么呢?

事实上,就是由于列表是动态的,它需要存储指针来指向对应的元素(占用 8 个字节)。另外,由于列表中元素可变,所以需要额外存储已经分配的长度大小(占用 8 个字节)。但是对于元组,情况就不同了,元组长度大小固定,且存储元素不可变,所以存储空间也是固定的。

初始化的时间

对于静态变量,如果在内存中占用的空间不大,python会暂存这部分内存,这样的话在创建同样的元组时,python不需要向操作系统发出请求寻址,可以直接分配缓存的内存空间

元组的初始化速度要比列表快 5 倍。

当然,如果你想要增加、删减或者改变元素,那么列表显然更优。因为对于元组来说,必须得通过新建一个元组来完成。

总的来说,元组确实没有列表那么多功能,但是元组依旧是很重要的序列类型之一,元组的不可替代性体现在以下这些场景中:

  • 元组作为很多内置函数和序列类型方法的返回值存在,也就是说,在使用某些函数或者方法时,它的返回值会元组类型,因此你必须对元组进行处理。
  • 元组比列表的访问和处理速度更快,因此,当需要对指定元素进行访问,且不涉及修改元素的操作时,建议使用元组。
  • 元组可以在映射(和集合的成员)中当做“键”使用,而列表不行。这会在后续章节中作详解介绍。

索引&切片

索引

python中基本数据类型,像字符串,列表,元组都是可以通过 索引来获取其中的元素

python中的索引分为两类:正索引负索引,下边举例

l = [1, 2, 3] 
l[1] # 2
l[2] # 3
l[4] # 报错 越界
l[-1] # 3

切片

python中数据类型支持通过切片的方式获取元素,切片":" “::”,下面详细的介绍一下切片的操作

参考文章:https://blog.csdn.net/qiushangren/article/details/103550923?spm=1001.2014.3001.5501

上边有讲python中的下标就是索引有两套:一套正索引,一套负索引
s = 'python'
   p  y  t  h  o  n
正 0  1  2  3  4  5
负 -6 -5 -4 -3 -2 -1
对应位置的 正下标 - 负下标=len(a)
使用正下标时,下标i取值范围为0 <= i < len(a)     超出范围为越界
使用负下标时,下标i取值范围为-1>= i >-len(a)-1   超出范围为越界

数组操作中一般通过 ":" 和数字或变量的组合来灵活使用里面的元素  # ":" 一般表示循环
s[i:j:k] 意思就是从下标i开始到下标j结束(左闭右开) 步长为k(k为非0整数)

我这里以步长的正负帮助理解这些概念

当k > 0 
  i和j同号时 必须满足i < j 例如 s[1:2:1]='y' s[-2:-1:1]='0'
  i和j异号时 必须满足i > j 例如 s[2:-2:1]='th' 但是注意 |正索引 - 负索引| < len(a) s[2:-4:2]=''
当k < 0
  i和j同号时 必须满足i > j 例如 s[2:1:-1]='t' s[-1:-2:-1]='n'
  i和j异号时 必须满足i < j 例如 s[2:-1:-1]='oht' 但是注意 |正索引 - 负索引| < len(a) s[-1:5:-1]=''

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值