容器序列

listtuple, collections.deque 存放不同类型的数据

扁平序列

strbytes,bytearray,memoryview,array.array,这类容器只能容纳一种类型

容器序列存放的是他们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。

扁平序列其实是一段连续的内存空间,所以扁平序列其实更加紧凑,但是他们里面只能存放诸如字符、字节和数值这种基础类型

可变序列

list, bytearry,array.array,collections.dequememoryview

不可变序列

tuplestr, bytes

  • array

    1
    from array import array
    2
    from random import random
    3
    4
    floats = array('d', (random() for i in range(10 ** 7)))
    5
    print(floats[-1])
    6
    # print(floats)
    7
    with open("floats.bin", 'wb') as f:
    8
        floats.tofile(f)
    9
    10
    floats2 = array('d')
    11
    with open("floats.bin", 'rb') as f1:
    12
        floats2.fromfile(f1, 10 ** 7)
    13
    14
    print(floats2[-1])
    15
    print(floats == floats2)
列表和数组的属性和方法
列表 数组
s.__add(s2)__ s+s1, 拼接
s.__iadd(s2)__ s += s2, 就地拼接
s.append(e) 在尾部添加一个元素
s.byteswap 翻转数组内每个元素的字节序列,转换字节序
s.clear() 删除所有元素
s.__contains__(e) 是否含有e
s.copy() 对列表浅复制
s.__copy__() copy.copy的支持
s.count(e) s中出现e的次数
s.__deepcopy__() copy.deepcopy的支持
s.__delitem__(p) 删除位置p的元素
s.exteng(it) 将可迭代对象it里的元素添加到尾部
s.frombytes(b) 将压缩成机器织的字节序列读出来添加到尾部
s.fromfile(f, n) 将二进制文件f内含有机器织读出来添加到尾部,最多添加n项
s.fromlist(l) 将列表里的元素添加到尾部,如果其中任何一个元素导致了TypeError异常,那么所有的添加都会取消
s.__getitem__(b) s[p],读取位置p的元素
s.index(e) 找到e在序列中第一次出现的位置
s.insert(p, e) 在位于p的元素之前插入e
s.itemsize 数组中每个元素的长度是几个字节
s.__iter__() 返回迭代器
s.__len__() len(s),序列的长度
s.__mul__(n) s*n, 重复拼接
s.__imul__() s *= n,就地重复拼接
s.__rmul__() n*s反向重复拼接
s.pop([p]) 删除位于p的值并返回这个值,p的默认值是最后一个元素的位置
s.remove(e) 删除序列里第一个出现的e元素
s.reverse() 就地调转序列中元素的位置
s.__reversed__() 返回一个从尾部开始扫描元素的迭代器
s.__setitem__(P, e) s[p] = e, 把位于p位置的元素替换成e
s.sort([key], [revers]) 就地排序序列,可选参数有key和reverse
s.tobytes() 把所有元素的机器值用bytes对象的形式返回
s.tofile(f) 把所有元素以机器值的形式写入一个文件
s.tolist() 把数组转换成列表,列表里的元素类型是数字对象
s.typecode 返回只有一个祖父的字符串,代表数组元在C语言中的位置
memoryview

memoryview 是一个内置类,它能让用户在不复制内容的情况下操作同一个数组的不同切片

1
from array import array
2
3
numbers = array("h", [-2, -1, 0, 1, 2])
4
memv = memoryview(numbers)
5
print(len(memv))
6
print(memv[0])
7
8
memv_oct = memv.cast("B")
9
print(memv_oct.tolist())
10
print(numbers)
11
memv_oct[5] = 4
12
print(numbers)

output

1
5
2
-2
3
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
4
array('h', [-2, -1, 0, 1, 2])
5
array('h', [-2, -1, 1024, 1, 2])