Python数据结构基础内容

Posted zhou0000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据结构基础内容相关的知识,希望对你有一定的参考价值。

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 等修改列表的方法没有返回值
View Code

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]
View Code

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]
View Code

 







以上是关于Python数据结构基础内容的主要内容,如果未能解决你的问题,请参考以下文章

python基础第5篇 python基础补充内容

201555332盛照宗—网络对抗实验1—逆向与bof基础

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

《Python学习之路 -- Python基础之切片》

初入AngularJS基础门

C语言100个经典算法源码片段