Python数据结构(list)

列表list(索引快,增删慢)

一个由若干有序元素组成的线性的可变的数据结构叫列表;

(1)列表使用中括号 [ ] 表示;

(2)列表内元素是有顺序的,可以索引;

(3)列表是线性的数据结构;

(4)列表是可变的;

链表(增删快,索引慢)

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作。

列表与链表的区别:

(1)列表开辟的内存空间是一块连续的内存,他是连续存储的;而链表在内存中是非连续,非顺序的存储结构;

(2)列表索引快,增删操作慢;链表索引慢,增删操作快;

队列queue

队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在 表的前端(front)进行删除操作 ,而在 表的后端(rear)进行插入操作 。

栈stack

栈(stack)仅在 表尾进行插入或删除操作 的线性表。栈是一种数据结构,它按照后进先出的原则存储数据;

队列queue和栈stack的区别:

(1)队列先进先出(无底的管道);栈先进后出(有底的管道);

(2)队列只能在表头进行删除操作,表尾进行插入操作;栈是只能在表尾进行插入和删除操作;

(3)队列遍历数据比栈快;

1、列表的定义:

list( [iterable] ) 或 lst = [ ]

注意:列表不能一开始就定义大小;

2、列表的索引访问:

list[ index ],index就是索引,使用中括号访问;

注意:索引不能越界否则会报IndexError错误;

3、列表的查询:

index( value,[start,[stop] ] )

(1)通过值value,从指定区间查找列表内的元素是否匹配;

(2) 匹配到第一个就立即返回索引,不在匹配之后的元素;

(3)匹配不到,抛出ValueError错误;

count(value):返回列表中匹配value的次数;

len():返回列表元素的个数;

时间复杂度:

index 和 count 方法都是O(n),随着列表数据规模的增大,而效率下降;所以为了程序的效率少使用 index 和 count 方法;

4、列表元素的修改

索引访问修改:

list[ index ] = value

注意:索引不要越界;

5、列表增加、插入元素

append( object ) → None

(1)列表尾部追加元素,返回None(返回None意味这没有产生新的列表,在原列表上就地修改)

(2)时间复杂度:O(1)

insert( index,object ) → None

(1)在指定索引index处插入元素object,返回None(返回None意味这没有产生新的列表,在原列表上就地修改)

(2)时间复杂度:O(n)

(3)索引可以越界吗?

【1】索引超上界,尾部追加;

【2】索引超下界,头部追加;

extend( iteratable ) → None

(1)将可迭代对象的元素追加进来,返回None(返回None意味这没有产生新的列表,在原列表上就地修改)

+ → list

(1)连接操作,将两个列表连接起来,产生新的列表,原列表不变;

(2)本质上调用的是 _add_() 方法;

* → list

(1)重复操作,将本列表元素重复 n 次,返回新的列表,原列表不变;

6、列表删除元素

remove( value ) → None

(1)从左至右查找第一个匹配value的值,移除该元素,返回None(返回None意味这没有产生新的列表,在原列表上就地修改)

(2)时间复杂度:O(n) 效率低

pop( [ index ] ) → item

(1)不指定索引index,就从列表尾部弹出一个元素;

(2)指定索引index,就从索引处弹出一个元素,索引越界抛出IndexError错误;

(3)时间复杂度:不指定index时:O(1) 、 指定index时:O(n)【指定index时,删除索引处元素,索引后方的元素前移索引效率低】

clear() → None

(1)清除列表所有元素,剩下一个空列表;

7、列表的其他操作

reverse() → None

(1)将列表元素反转,返回None(返回None意味这没有产生新的列表,在原列表上就地修改)

sort(key=None,reverse=False) → None

(1)对列表元素进行排序,就地修改,默认升序;

(2)reverse为True,反转,降序;

(3)key一个函数,指定key如何排序;

eg:lst.sort(key = functionname)

in

eg:[3 , 4] in [1,2,[3,4]]

for x in [1,2,3,4]

8、列表复制

copy() → List

(1)copy后返回一个新列表;

(2)注意浅拷贝,深拷贝概念;

深拷贝:copy模块提供了deepcopy;

eg:import copy

lst0 = [1,[2,3,4],5]

lst5 = copy.deepcopy(lst0)

lst5[1][1] = 20

lst5 == lst0#False

9、随机数

random模块

(1)randint( a,b ):返回 [ a,b ] 之间的整数;【注意a,b此时是前包后包的】

(2)choice( seq ):从非空序列的元素中随机挑选一个元素;eg:random.choice( range(10) ),从0到9中随机挑选一个整数。random.choice( [1,3,5,7] )

(3)randrange( [start,] stop [,step] ):从指定范围内,按指定基数递增的集合中获取一个随机数,基数缺省值为1。eg:random.randrange(1,7,2):【 [1,7,2) 】

(4)random.shuffle(list) → None 就地打乱列表元素

(5)sample(population,k) → List:从样本空间或总体(序列或者集合类型)中随机取出k个不同的元素,返回一个新列表;

猜你喜欢

转载自blog.csdn.net/qq_40042590/article/details/81585444