当列表不是首选时

数组

from array import array # 引入数组类型
from random import random
floats=array('d',(random()for i in range(10**7))) 
# 利用一个可迭代对象来创建一个双精度浮点数的列表(类型码是'd'),这里的可迭代对象是一个生成器表达式
floats[-1]# 查看数组的最后一个元素
0.39807560121397423
fp=open('floats.bin','wb') 
floats.tofile(fp) # 把数组存入一个二进制文件里
fp.close()
floats2=array('d') # 新建一个双精度浮点数数组
fp=open('floats.bin','rb')
floats2.fromfile(fp,10**7) # 把1000万个浮点数从二进制文件里读取出来
fp.close()
floats2[-1] # 查看新数组的最后一个元素怒
0.39807560121397423
floats2==floats # 检查两个数组的内容是不是完全一样
True

内存视图

numbers=array('h',[-2,-1,0,1,2])
memv=memoryview(numbers) # 利用含有5个短整型有符号整数的数组(类型码是'h')创建一个memoryview
len(memv)
5
memv[0] # memv里的5个元素跟数组里的没有区别
-2
memv_oct=memv.cast('B') # 创建一个memv_oct,这一次是把memv里的内容转换成'B'类型,也就是无符号字符
memv_oct.tolist() # 以列表的形式查看memv_oct的内容
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
memv_oct[5]=4 # 把位于位置5的字节赋值成4
numbers # 因为把占2个字节的整体的高位字节改成了4,所以这个有符号整数的值就变成了1024
# 1,0 即由00000001 00000000 变成了 4,0 即 00000100 00000000,1*2**10=1024
array('h', [-2, -1, 1024, 1, 2])
print(2**8)
256

NumPy和SciPy

import numpy # 安装NumPy之后导入NumPy
a=numpy.arange(12) #新建一个0~11的整数numy.ndarray,然后把他打印出来
a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
type(a)
numpy.ndarray
a.shape # 查看数组的维度,它是一个一维的,有12个元素的数组
(12,)
a.shape=3,4 # 把数组变成二维的,然后打印出来
a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
a[2] # 打印出第三行
array([ 8,  9, 10, 11])
a[2,1] # 打印出第三行第二列的元素
9
a[:,1] # 打印出第二列
array([1, 5, 9])
a.transpose() # 把行和列交换,就a进行了转置
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

双向队列和其它形式的队列

from collections import deque
dq=deque(range(10),maxlen=10) # maxlen是一个可选参数,代表这个队列可以容纳的元素的数量,而且一旦设定,这个属性就不能修改了
dq
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
dq.rotate(3)# 队列的旋转操作接受一个n,n > 0时,队列的最右边的n个元素会被移动到队列的左边。n < 0时,最左边的n个元素会被移动到队列的右边 
dq
deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6])
dq.rotate(-4) 
dq
deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
dq.appendleft(-1) # 当试图对一个已满的队列做头部添加时,他尾部的元素会被删除
dq
deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9])
dq.extend([11,22,33]) # 在尾部添加3个元素会挤掉-1,1,2
dq
deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33])
dq.extendleft([10,20,30,40]) # extendleft(iter)方法会把迭代器里的元素逐个添加到双向队列的左边,因此迭代器里的元素会逆序出现在队列里
dq
deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8])
上一篇:leetcode剑指 Offer 59 - I. 滑动窗口的最大值


下一篇:STM32学习(6)-Systick滴答定时器、delay函数介绍、端口复用和端口重映射