python内置的数据结构主要有列表list,元组tuple,字典dict,集合set这四种。今天主要说的是列表作为栈、队列、矩阵的使用,其他几种数据结构之前都有介绍到,朋友们可以翻看之前的文章。
1.列表的特征:
列表是可变的,即可对其中的元素进行修改、删除、增加
列表是有序的,每个元素位置固定,即可使用索引访问
列表中元素可以是python中的任意对象,即字符串、整数,元组、等等
列表的具体方法在之前的文章中已经讲到过,在这里就不赘述了,需要的可以点链接进去查看
https://mp.csdn.net/mp_blog/creation/editor/106108178
2.列表可以当做栈使用:
列表中的使用方法可以很方便的当做一个栈来使用,栈作为特定的数据结构,它遵循的是先进后出。示意图如下:
列表的append()可以在栈顶添加一个元素,pop()方法可以将一个元素从栈顶释放。
3.列表可以当做队列使用:
队列遵循的是先进先出。将列表当做队列使用其实效率并不是很好。
因为在列表的末尾添加和释放元素速度后很快,但是在列表的头部和中间插入弹出速度却不行,
因为涉及到操作的后面的元素挨个的都要移动位置。
4.列表推导式:
列表推导式提供了从序列创建列表,通常就是将一些操作运用到某个序列的每一个元素上从而将
其结果生成新在的列表中或者根据其判定条件创建子序列。所有通常列表推导式的后面经常跟有
for和if语句,for和if语句可以是0个或者多个。
通过列表推导式获得新的列表
>>> v = [1,3,5]
>>> [3*i for i in v]
[3, 9, 15]
>>> [[i, i**2] for i in v]
[[1, 1], [3, 9], [5, 25]]
>>> [3*i for i in v if i > 3]
[15]
>>> [3*i for i in v if i <= 3]
[3, 9]
>>> f = [' jack','lucy ','tom li']
>>> [i.strip() for i in f]
['jack', 'lucy', 'tom li']
>>> a = [2,4,6]
>>> b = [3,5,9]
>>> [i*j for i in a for j in b ]
[6, 10, 18, 12, 20, 36, 18, 30, 54]
>>> [i-j for i in a for j in b ]
[-1, -3, -7, 1, -1, -5, 3, 1, -3]
>>> [a[i]*b[i] for i in range(len(a))]
[6, 20, 54]
#列表推导式可以使用复杂表达式或者嵌套函数
>>> [str(round(355/112,i)) for i in range(1,9)]
['3.2', '3.17', '3.17', '3.1696', '3.16964', '3.169643', '3.1696429', '3.16964286']
5.列表嵌套实现矩阵:
m = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
>>> [[r[i] for r in m] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>> t=[]
>>> for i in range(4):
t.append([r[i] for r in m])
>>> t
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>> f=[]
>>> for i in range(4):
tr=[]
for r in m:
tr.append(r[i])
f.append(tr)
>>> f
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]