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

 

转载于:https://www.cnblogs.com/zhou0000/p/8533064.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值