记录学习《流畅的python》的一些知识-----元组(2)

开始记录我学习《流畅的python》的过程

    • 2020.12.28

2020.12.28

1.数组
如果需要一个只包含数字的列表,那么array.array比list更高效。数组支持所有跟可序列有关的操作,包括.pop、.insert、.extend。
例:创建一个有1000万个随机浮点数的数组开始,到如何把这个数组存放到文件里,再到如何从文件读取这个数组。

from array import array
from random import random
floats = array('d', (random() for i in range(10**7)))
print(floats[-1])
fp = open('floats.bin', 'wb')
floats.tofile(fp)
fp.close()
floats2 = array('d')
fp = open('floats.bin', 'rb')
floats2.fromfile(fp, 10**7)
fp.close()
print(floats2[-1])
print(floats2 == floats)

运行结果:
在这里插入图片描述
2.内存视图
memoryview是一个内置类,它能让用户在不复制内容的情况下操作同一个数组的不同切片。
memoryview.cast的概念跟数组模块类似,能用不同的方式读写同一块内存数据。而且内容字节不会随意移动,它会把同一块内存里的内容打包成一个全新的memoryview对象给你。
例:利用memoryview精确修改了一个数组的某个字节,这个数组的元素是16位二进制整数。

from array import array
numbers = array('h', [-2, -1, 0 , 1 , 2])
memv = memoryview(numbers)
print(len(memv))
print(memv[0])

memv_oct = memv.cast('B')
print(memv_oct.tolist())

memv_oct[5] = 4
print(numbers)

运行结果:
在这里插入图片描述
把memv中的内容转换成’B’类型,也就是无符号字符。

3.Numpy和Scipy
Numpy实现了多维同质数组和矩阵,这些数据结构不但能处理数字,还能存放其他由用户定义的记录。通过Numpy,用户能对这些数据结构里的元素进行高效的操作。
SciPy是基于NumPy的另一个库,它提供了很多跟科学计算有关的算法,专为线性代数,数值积分和统计学而设计。
例:二维数组的基本操作

import  numpy
a = numpy.arange(12)
print(a)
print(type(a))
print(a.shape)

a.shape = 3, 4
print(a)

print(a[2])

print(a[2, 1])

print(a[:, 1])

print(a.transpose())

运行结果:
记录学习《流畅的python》的一些知识-----元组(2)_第1张图片
4.双向队列
利用append和pop方法,可以把列表当作栈或者队列来用、但是删除列表的第一个元素之类的操作是很耗时的,因为这些操作会牵扯到移动列表里的所元素。
collections.deque类是一个线程安全,可以快速从两端添加或者删除元素的数据类型。

from _collections import deque
dq = deque(range(10), maxlen=10)
print(dq)

dq.rotate(3)
print(dq)

dq.rotate(-4)
print(dq)

dq.appendleft(-1)
print(dq)

dq.extend([11, 22, 33])
print(dq)

dq.extendleft([10, 20, 30, 40])
print(dq)

运行结果:
记录学习《流畅的python》的一些知识-----元组(2)_第2张图片

你可能感兴趣的:(python,列表,元组,numpy)