什么是容器?
就是可以存放多个东西,可以弥补变量无法存储大量数据的缺陷。
一.列表(list)–线性表(有序)
列表基于线性表(双向链表),所以我们先来讲一下线性表的内容。
线性表:
(1).数组:数组是一种连续存放的内存结构,查询较快,但是增删改效率慢。在python中是没有数组的。
(2).栈:特点:先进后出(FILO),后进先出(LIFO)
(3).队列:特点:先进先出(FIFO),后进后出
(4).链表:查询效率低,但增删改效率高
单向链表:数据+后继结点的地址
双向链表:前驱结点的地址+数据+后继结点的地址
【python的列表这种容器就是基于双向链表实现的】
--------------------------------------------------------------------
(1).列表的定义:
方法一:[python是弱数据类型语言,变量的类型由数值决定]
ls=[2,3,5,4]
方法二:使用全局函数list()
ls=list() #空列表
ls=list([1,2.3,"hha"])
(2).如何访问列表里的元素:下标从0开始
ls=list([1,2,3,4])
ls[0] --结果是1
#同样也通过下标来修改列表某个元素:
ls[2]=4 --ls=[1,2,4,4]
#可通过切片来获取列表中的一些元素:
ls[1:3] --结果是[2,3],前闭后开
(3).求列表里元素个数:使用len()全局函数
ls=[1,2,3]
len(ls)
(4).如何遍历容器:for循环、while循环
#1.for循环
ls=[1,2,3]
for i in ls:
print(i)
#2.while循环
ls=[1,2,3]
index=0
while index<len(ls):
print(ls[index])
index+=1
(5).列表中的方法:
#可通过dir(list)查看列表中的方法:
['append', 'clear', 'copy', 'count', 'extend', 'index',
'insert', 'pop', 'remove', 'reverse', 'sort']
----------------ls=[1,2,3,3]-------------------------
#1.append()--向列表尾部追加元素
ls.append(4) --ls=[1,2,3,3,4]
#2.insert()--向指定位置添加元素
ls.insert(0,100) --ls=[100,1,2,3,3]
#3.sort()--排序,默认是升序(整数和字符串不能一起排序)
ls.sort() --ls=[1,2,3,3]
#4.reverse()--颠倒,将元素翻转
ls.reverse() --ls=[3,3,2,1]
#5.index()--查找元素第一次在列表中出现的位置
ls.index(3) --结果是3
如果没有要查找的元素则会抛出异常:ValueError值异常
#6.remove()--通过元素去移除(不会将相同的都移除,只移除一个)
ls.remove(3) --ls=[1,2,3]
如果元素不存在,则会抛出异常:ValueError值异常
#若要把列表中一个元素的相同元素移除完:
ls=[1,2,3,4,4]
while 4 in ls:
ls.remove(4)
#7.count()--统计元素个数
ls.count() --结果是4
也可以用len(ls),都是统计列表元素个数
#8.copy()--拷贝对象,是在堆内存中进行对象拷贝的
ls1=[]
方法一:ls1=ls --ls1=[1,2,3,3]
方法二:ls1=ls.copy() --ls1=[1,2,3,3]
区别:
方法一:当ls列表改变,ls=[1,2,3,3,55],那么ls1=[1,2,3,3,55]
方法二:当ls列表改变,ls=[1,2,3,3,55],那么ls1=[1,2,3,3]
原因:传递(=)是将对方(ls)的地址都传递过去了,而拷贝(copy())
只是将对方(ls)的当前值拷贝过来了。
#9.extend()--合并列表
ls1=[22,11]
ls1.extend(ls) --ls1=[22,11,1,2,3,3]
#10.pop()--删除最后元素,返回值就是删掉的那个元素
ls.pop() --返回结果是3,且ls=[1,2,3]
#11.clear()--清除元素
ls.clear() --ls=[]
补充:
内存中有包括栈、堆、代码区、数据区。
栈(只是存储了一个地址),堆(指针,对象是存储在堆中),代码区(code area),数据区(data area)
#函数弹栈,全局变量不弹栈(全局变量常驻内存)
下一个讲解的容器是集合:点这里