Python内置结构-列表_python 看是什么结构

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

int 取整:正负数都只取整数

整除(向下取整)

1.3 round圆整

在Python中有一个round函数,用于对小数进行取整,不过在Python中的round有些特别,总结一句话就是4舍6入5取偶。即当小数点后面的数字小于5呢,会直接舍去,大于5呢,会直接进位,等于5呢,会取最近的偶数。

1.4 常用的其他函数

max:常用来在可迭代对象中求最大值

min: 常用来在可迭代对象中求最小值

bin:把对象转换为二进制

oct:把对象转换为八进制

hex:把对象转换为十六进制

1.5 类型判断

由于Python是一种强类型语言,在数据比较时,只有相同数据类型,才可以进行比较。这时我们就需要知道对象到底是什么类型,type就是用来查看类型的。

从上面代码结果可以看出type返回的是类型,并不是字符串,而在数据判断时我们需要的是判断,比如判断某个变量是某个类型的,那么这个时候就需要用到instance了。

2 列表

列表是Python中最基本的数据结构。什么是序列呢?我们可以认为它是一个队列,一个排列整齐的队伍。列表内的个体称为元素,它可以是任意对象(数字、字符串、对象、列表),多个元素组合在一起,使用逗号分隔,中括号括起来,就是列表。它有如下特点:

列表内的元素是有序的,可以使用索引(下标)获取,第一个索引是0,第二个索引是1,依此类推。

线性的存储结构,(从左至右依次存储)

列表是可变的,我们可以对其内的元素进行任意的增删改查

创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

主要:列表没办法在初始化时就指定列表的大小

2.1 索引访问

列表的索引有如下特点:

正索引:从左至右,从0开始,为列表中每一个元素编号

负索引:从右至左,从-1开始

正负索引不可以超界,否则会引发一场IndexError

为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是下届,右边是上界

列表通过索引访问,例如:list[index],index就是索引,使用中括号访问。

2.2 列表和链表的区别

我们通常会把列表和链表拿来做对比,它俩虽然都是有序的可以被索引,但是内部实现方法以及适用场景有很大区别。

列表在内存中的存储方式是线性的,而链表是非线性的,他们的差别如下:

由上图我们可以得到如下结论:

列表:线性结构,顺序结构,可以被索引,数据存放的是连续的内存空间,取值时,只需要进行偏移量计算即可,属于一步到位型,但是在增加数据时,需要针对其后所有的数据进行移动,所以性能不高。

链表:线性结构,顺序结构,可以被索引,放数据的地方,在内存地址上并不是连续的。增删输出时,只需断开前后两个元素先前的连接,增加新元素后,建立新的连接即可,但由于其不连续的空间,索引起来效率低,需要从头开始寻找。

注意:列表的增删如果是在队伍当中,那么相对效率比较低,但是如果在尾部增删,效率很快。链表还分为单向和双向,表示索引方向而已,这里不在进行说明

扩展:

下面是其他基于列表/链表特性的实现:

queue:队列(一般是从队首或者队尾获取数据)分为:先进先出队列和先进后出队列及优先级队列

stack:栈。后进先出的就被叫做栈(主要应用于函数的压栈)

2.3 列表的查询

列表提供了很多的方法,使我们可以方便的对它进行查询、统计等操作。

index和count的时间复杂度都是O(n),即随着列表的规模增加,效率会依次下降。什么是时间复杂度? 这是在计算算法优劣时的主要参考值,我们主要使用大写的O来表示时间复杂度,由于index和count函数都需要遍历列表,所以如果这个列表有n个元素的话,那么它的时间复杂度就为O(n),详细的解释,建议自行了解,这里知道这样表示即可,由于list[1]通过偏移量进行火速据访问,可以理解为一步到位,所以这种方式的时间复杂度为O(1),不会随着规模增大而改变。

扩展:

如果我们要获取列表的元素总数,我们需要什么设计呢?

设计一个获取元素总量的函数,当调用时,对列表进行遍历获取元素的总数,并返回

设置一个计数器,随着元素的增加和减少对计数器进行修改

很明显第一个方法的时间复杂度是O(n),而第二个方法由于事先存储着列表元素的总数,所以它的时间复杂度是O(1),列表使用的就是方式2,而通过Python内置的len函数就可以获取列表的大小(不仅仅针对列表,其他元素也可以)

2.4 列表元素修改

我们使用索引可以获取列表中对应索引位置的元素,同时我们也可以通过索引直接对对应索引位的元素进行修改

需要注意的时,所以不要越界,否则会报异常

2.5 列表的追加和插入

列表提供了对其进行追加或插入的函数,即append和insert。先来看看这两个函数的使用方法。

说明:

列表尾部追加元素时,append的返回值是None,会直接对原列表进行操作,对应的时间复杂度是O(1)

列表插入元素时,与append形同,返回None,直接对原列表进行操作,对应的时间负载度是O(n),因为在列表首部插入元素时,会使其他元素整体移动。当索引超界时会有如下两种情况

超越上界,尾部追加

超于下界,首部追加

很多场景下我们对列表操作不是一个一个元素的追加,更多的时候,我们可能需要的是批量的操作,列表提供了一个extend函数用于满足这种需求。

L.extend(iterable) -->None-- 从一个可迭代对象中把元素扩展追加到当前列表中

说明:

extend直接操作原列表,所以其返回值为None

如果扩展的可迭代对象过于大,那么可能会引起GC进行内存整理,因为扩充起来的元素,有可能会被当前列表所申请的内存空间更大。建议少用

扩种列表还有其他方法比如列表相+,列表相*,当使用这两种方式是会返回新的列表,不会修改原列表

注意:使用+进行列表拼接的时候,由于返回了新的列表,原来相加的两个列表可能就没有用了,而如果这两个列表非常大,那么等于重复占用了新的内存空间,内存资源很宝贵,省着点用哈

2.6 列表使用*重复带来的问题

我们使用*可以快速的生成一些特定的列表形式,比如我需要一个6个元素的列表,每个元素的值为1,我就可以这样写 lst = [1]; lst * 6,这样写的确没什么问题,但是在某些场景下会产生意想不到的问题,比如在列表嵌套的时候。

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值