1.列表:
>>> a=[123,333,333,1,145.5] >>> print(a.count(333),a.count(1),a.count('x')) #list.count(x)返回 x 在列表中出现的次数 (2, 1, 0) >>> a.insert(2,-1) #list.insert(i,x) 在指定位置 i 插入一个元素x >>> a.append(333) #list.append(x) 把x添加到列表的结尾 >>> a [123, 333, -1, 333, 1, 145.5, 333] >>> a.index(333) #list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误 1 >>> a.remove(333) #list.remove(x)删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误 >>> a [123, -1, 333, 1, 145.5, 333] >>> a.reverse() #list.reverse()倒排列表list的元素 >>> a [333, 145.5, 1, 333, -1, 123] >>> a.sort() #list.sort()对列表元素排序(具体怎样排序的不清楚,数字为从小到大) >>> a [-1, 1, 123, 145.5, 333, 333] #类似 insert, remove 或 sort 等修改列表的方法没有返回值
2.将列表当做堆栈使用:
堆栈:先进后出
列表方法使得列表可以作为一个堆栈来使用,用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来
>>> stack=[3,4,5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() #不指定位置默认删除最后一个 7 >>> stack.pop() 6 >>> stack [3, 4, 5]
3.将列表当做队列使用
队列:先进先出
首先了解Python常用内建模块:collections
1.namedtuple函数:用它创建一个自定义的元组tuple对象,它具备元组tuple的不变性,又可以根据属性来引用,使用十分方便,注意d别写掉了哈哈
>>> from collections import namedtuple >>> Point=namedtuple('Point',['x','y']) #表示一个点的二维坐标 >>> p=Point(1,2) >>> p.x 1 >>> p.y 2
#类似的,用坐标和半径表示一个圆,也可以用namedtuple定义
Circle=namedtuple('Circle',['x','y','r'])
#总结语法:namedtuple('名称',[属性])
2.deque(双端队列)
目的:为了高效实现插入和删除操作的双向列表,适合用于队列和栈
原因:使用列表存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为列表是线性存储,数据量大的时候,插入和删除效率很低。
deque
除了实现list的append()
和pop()
外,还支持appendleft()
和popleft()
,这样就可以非常高效地往头部添加或删除元素
>>> from collections import deque >>> q=deque(['a','b','c']) >>> q.append('x') >>> q.appendleft('y') >>> q deque(['y', 'a', 'b', 'c', 'x']) >>> q.pop() 'x' >>> q.popleft() 'y' >>> q deque(['a', 'b', 'c']) #总结语法:定义队列q=deque(列表)
#deque支持头部添加appendleft()和头部删除popleft(),遇到把列表当做队列就这样做才高效
列表推导式:
>>> vec=[2,4,6] >>> [3*x for x in vec] [6, 12, 18] >>> [[x,x**2] for x in vec] [[2, 4], [4, 16], [6, 36]] >>> [3*x for x in vec if x>3] [12, 18] >>> [3*x for x in vec if x<2] [] >>> vec1=[2,4,6] >>> vec2=[4,3,-9] >>> [x*y for x in vec1 for y in vec2] [8, 6, -18, 16, 12, -36, 24, 18, -54] >>> [vec1[i]*vec2[i] for i in range(len(vec1))] [8, 12, -54] >>> [str(round(355/113,i)) for i in range(1,6)] #round(x,i)返回浮点数x的四舍五入值,保留小数位数是i ['3.0', '3.0', '3.0', '3.0', '3.0'] >>> [x.strip() for x in vec] Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'int' object has no attribute 'strip' #错误的是类型 >>> vec3=['john','jack','tom'] >>> [x.strip() for x in vec3] ['john', 'jack', 'tom']