• Python3标准库:array数组


    1. array数组

    array模块定义了一个序列数据结构,看起来与list很相似,只不过所有成员都必须是相同的基本类型。支持的类型包括所有数值类型或其他固定大小的基本类型(如字节)。

    代码类型最小大小(字节)
    b int 1
    B int 1
    h signed short 2
    H unsigned short 2
    i signed int 2
    I unsigned int 2
    l signed long 4
    L unsigned long 4
    q signed long long 8
    Q unsigned long long 8
    f float 4
    d double float 8

    1.1 初始化

    array被实例化时可以提供一个参数来描述允许哪种数据类型,还可以有一个存储在数组中的初识数据序列。

    import array
    import binascii
    
    s = b'This is the array.'
    a = array.array('b', s)
    
    print('As byte string:', s)
    print('As array      :', a)
    print('As hex        :', binascii.hexlify(a))

    在这个例子中,数组被配置为包含一个字节序列,并用一个简单的字符串初始化。

    1.2 处理数组

    与其他Python序列相似,可以采用同样的方式扩展和处理array。

    import array
    import pprint
    
    a = array.array('i', range(3))
    print('Initial :', a)
    
    a.extend(range(3))
    print('Extended:', a)
    
    print('Slice   :', a[2:5])
    
    print('Iterator:')
    print(list(enumerate(a)))

    目前支持的操作包括分片、迭代以及在末尾增加元素。

     

    1.3 候选字节顺序

    如果数组中数据没有采用原生的字节顺序,或者在发送到一个采用不同字节顺序的系统(或在网络上发送)之前数据需要交换顺序,那么可以由Python转换整个数组而不必迭代处理每一个元素。

    import array
    import binascii
    
    def to_hex(a):
        chars_per_item = a.itemsize * 2  # 2 hex digits
        hex_version = binascii.hexlify(a)
        num_chunks = len(hex_version) // chars_per_item
        for i in range(num_chunks):
            start = i * chars_per_item
            end = start + chars_per_item
            yield hex_version[start:end]
    
    start = int('0x12345678', 16)
    end = start + 5
    a1 = array.array('i', range(start, end))
    a2 = array.array('i', range(start, end))
    a2.byteswap()
    
    fmt = '{:>12} {:>12} {:>12} {:>12}'
    print(fmt.format('A1 hex', 'A1', 'A2 hex', 'A2'))
    print(fmt.format('-' * 12, '-' * 12, '-' * 12, '-' * 12))
    fmt = '{!r:>12} {:12} {!r:>12} {:12}'
    for values in zip(to_hex(a1), a1, to_hex(a2), a2):
        print(fmt.format(*values))

    byteswap()方法会用C交换数组中元素的字节顺序,这比用Python循环处理数据高效的多。

  • 相关阅读:
    npm version patch
    nginx 操作
    基于 Vue CLI 组件库封装,按需加载实现
    nginx 配置文件路径获取
    Laravel 生产资源路由并指定模型
    base.js,通用js方法,Js方法封装
    jquery.params.js,Jquery获取页面参数,js获取页面参数
    layui使用,LayUI select不显示,LayUI文件上传,Layui自定义校验规则
    Layer弹窗消息封装,Layer消息提示封装,Layer使用
    Html跨域js封装,前端页面跨域js,postMessage实现跨域
  • 原文地址:https://www.cnblogs.com/liuhui0308/p/12335400.html
Copyright © 2020-2023  润新知