详解Python中的array数组模块相关使用
详解Python中的array数组模块相关使用
mickelfeng 发表于12个月前
详解Python中的array数组模块相关使用
  • 发表于 12个月前
  • 阅读 43
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 数组并不是Python中内置的标配数据结构,不过拥有array模块我们也可以在Python中使用数组结构,下面我们就来详解详解Python中的array数组模块相关使用

数组并不是Python中内置的标配数据结构,不过拥有array模块我们也可以在Python中使用数组结构,下面我们就来详解详解Python中的array数组模块相关使用

>>> import array#定义了一种序列数据结构
>>> help(array)  
  #创建数组,相当于初始化一个数组,如:d={},k=[]等等
    array(typecode [, initializer]) -- create a new array
  #a=array.array(‘c‘),决定着下面操作的是字符,并是单个字符
  #a=array.array(‘i‘),决定着下面操作的是整数
     |  Attributes:
     |  
     |  typecode -- the typecode character used to create the array
     |  itemsize -- the length in bytes of one array item

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

import array

import binascii

s = 'This is the array.'

a = array.array('c', s)

print 'As string:', s

print 'As array :', a

print 'As hex  :', binascii.hexlify(a)


数组配置为包含一个字节序列,用一个简单的字符串初始化。

>>> ================================ RESTART ================================
>>>
As string: This is the array.

As array : array('c', 'This is the array.')

As hex  : 54686973206973207468652061727261792e


处理数组
类似于其他python序列,可以采用同样方式扩展和处理array。

import array
import pprint

a = array.array('i', xrange(3))

print 'Initial :', a

a.extend(xrange(3))

print 'Extended:', a

print 'slice: :', a[2:5]

print 'Itetator:'

print list(enumerate(a))


支持的操作包括分片,迭代以及向末尾增加元素。

>>> ================================ RESTART ================================
>>>
Initial : array('i', [0, 1, 2])

Extended: array('i', [0, 1, 2, 0, 1, 2])

slice: : array('i', [2, 0, 1])

Itetator:

[(0, 0), (1, 1), (2, 2), (3, 0), (4, 1), (5, 2)]


数组和文件
可以使用高效读/写文件的专用内置方法将数组的内容写入文件或从文件读取数组。

import array
import binascii
import tempfile

a = array.array('i', xrange(5))
print 'A1: ',a
output = tempfile.NamedTemporaryFile()
a.tofile(output.file)
output.flush

with open(output.name, 'rb') as input:

  raw_input = input.read()

  print 'Raw Contents:', binascii.hexlify(raw_data)

  input.seek(0)
  a2 = array.array('i')

  a2.fromfile(input, len(a))

  print 'A2: ', a2


候选字节顺序   

如果数组中的数据没有采用固有的字节顺序,或者在发送到一个采用不同字节顺序的系统前需要交换顺序,可以在python转换整个数组而无须迭代处理每个元素。

import array
import binascii

def to_hex(a):
  chars_per_item = a.itemsize * 2

  hex_version = binascii.hexlify(a)

  num_chunks = len(hex_version) / chars_per_item

  for i in xrange(num_chunks):

    start = i * chars_per_item

    end = start + chars_per_item

    yield hex_version[start:end]


a1 = array.array('i', xrange(5))

a2 = array.array('i', xrange(5))

a2.byteswap()

fmt = '%10s %10s %10s %10s'

print fmt % ('A1_hex', 'A1', 'A2_hex', 'A2')

print fmt % (('-' * 10,) * 4)

for value in zip(to_hex(a1), a1, to_hex(a2), a2):
  print fmt % value

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

>>> ================================ RESTART ================================
>>>
  A1_hex     A1   A2_hex     A2
---------- ---------- ---------- ----------

 00000000     0  00000000     0

 01000000     1  00000001  16777216

 02000000     2  00000002  33554432

 03000000     3  00000003  50331648

 04000000     4  00000004  67108864

 

Type code   C Type         Minimum size in bytes#最小字节大小
‘c‘      character (字符,单个字符)       1 
‘b‘      signed integer     1 
‘B‘      unsigned integer    1 
‘u‘      Unicode character   2 
‘h‘      signed integer     2 
‘H‘      unsigned integer    2 
‘i‘      signed integer     2 
‘I‘      unsigned integer    2 
‘l‘      signed integer     4 
‘L‘      unsigned integer    4 
‘f‘      floating point     4 
‘d‘      floating point     8
标签: Python array
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
mickelfeng
粉丝 216
博文 914
码字总数 508154
×
mickelfeng
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: