列表是个有序结构,在内存中是一个挨一个的排列方式,有顺序的可以索引,还可以迭代
特点:有顺序,可索引,可迭代,可变
链表就是links
range一定要拿()抱起来,[]是不会帮你迭代的
可以复合结构
索引也叫下标,一般从0开始
正索引,就是从0开始编号,0,1,2
负索引,从-1开始,-1,-2,-3
不能超界,引发异常indexerror
左边是下边界,右边是上边界,左边是头,右边是尾
index本质上是函数,value是值
l对象,调用index方法,第一个元素没有2,2是在第一个元素里面
找不到会告诉你这个值有问题,2不在当前列表中
index通过值查找,并没有通过索引
从左到右查找你的值,找到后返回值对应的索引
找不到则返回异常valueerror
count所有元素过一遍才知道有几个,没有就是0
index,count,一个是去计数,一个是找第一个出现,没找到还是需要走一遍
count,有多少个元素,就需要走多少个,叫遍历,全部浏览一遍
index找的是value,是要把元素拿出来看看值比较的
下面是找索引是3的元素
但凡看到value的效率都不太高,最好不使用
用了start。stop可以不写,表示从索引几开始查找
O(n)
n表示列表中有n个元素
O(n)表示把所有的元素都遍历了一遍,非常耗时
随着你的规模越来越大,耗时越来越长,随着n的变化你的效率会越来越低
可以认为所有列表以前都是空的,加个元素,给你记1,再加一个1+1=2,不管你从哪里拿走元素,都-1,对于个数都是-1的事情
列表中加个对象,表示当下的元素的个数,增加元素就+1,减少元素就-1,有个计数装置,放在列表对象身上,问你有多少个元素,直接返回给你值即可
len实际上是个常量,你问就立即返还给你面试会问道,随着规模增大,效率就下降,是靠遍历来完成的
打个问号其实也相当于调用了帮助
l是list对象,就告诉你list对象的构造方法
不能写成这样,这样表示调用的函数,返回值交给help
2能找到就返回个索引,是个整形,就help的是int类型
help(3),3 这个东西能做什么
还可以这么写
list+索引号
但是不能这么写,有些语言支持稀疏数组,但是python不支持,所以不能写8,原数组索引没到8
O(1)一步到位,直接解放,如果写的东西时间复杂度已经是O(1),就已经很好,没法改了
在尾部增加元素,找到尾部即可
append这个方法,其实是有返回值的,返回的是NONE,把一个元素加到列表的尾部上,
代表需要用索引先查找到位置,然后插入后,需要一个个元素往后挪
index在头上插入是0,但如果是-1,就需要测试一下
没有返回值
加进去了
没有返回值相当于返回了none这个值,强行打印
插入 /insert,c往前一放,其他值都往后挪
insert这个事情最好少做
头部追加指定0即可,尾部就append即可,没必要写insert写超界的100之类的
列表还可以扩展,
就地修改,把可迭代的元素一个个拿进来,变成自己的,在尾部追加
扩展还需要写可迭代对象,返回的是none
就地修改,把自己改变
**造一个新的列表出来,+号出来的就是列表,有值出来
**
最后就有0,1,2,3,4
返回是none,修改的是自己,没有返回代表创建 的是新的
打印出以后,引用计数位0,就会被垃圾回收回收
现在代表l1跟对象关联起来,有人记住了,引用人计数+1
相当于把前面的参数*3,生成了一个新的列表
l1就没有变化
l1*3,返回的是一个列表对象,列表对象可以append,
append里面是对象。不是列表,不迭代
append写明,给什么元素就加进去,不给你迭代
如果一定要迭代,使用list,把里面元素迭代返回
相当于如下
append不给你迭代,extend表示后面如果你能迭代就把你一个个都加入
乘以3表示返回一个新的列表
如果想要增加很多元素,就可以使用extend迭代进去
**要注意返回值,append会返回none,如果有人就拿,没人要就不显示了
看不出来效果就可以像定义变量一样 看看
**
两个列表相加,等于两个列表直接合并
加法通常是把多余的列表合并,是经常使用的
但是要注意,加列表,如果另外两个列表还存在,内存空间等于翻倍
这些方法基本不用,但是偶尔用,能少用就少用
规模大的时候,要注意