文档章节

详解Python中的array数组模块相关使用

mickelfeng
 mickelfeng
发布于 2017/02/23 11:14
字数 804
阅读 93
收藏 0

数组并不是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

© 著作权归作者所有

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 227
博文 2631
码字总数 568692
作品 0
成都
高级程序员
Python 机器学习基础(二)——Numpy 篇

本文是 Python 机器学习基础系列文章的第二篇——Numpy 篇。 Numpy Numpy 是 Python 的一种开源数值计算扩展包,它可以用于存储和处理大型矩阵,比 Python 自带的嵌套列表结构要高效得多。 ...

withchris
05/23
0
0
Shell中的数组及其相关操作

Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。 Sh...

孟飞阳
05/28
0
0
比Python快100倍,利用Cython实现高速NLP项目

选自Medium,作者:Thomas Wolf,机器之心编译。 相关 Jupyter Notebook 地址:github.com/huggingface… 去年我们发布 Python 包 coreference resolution package 后,我们收到了来自社区的...

07/16
0
0
手把手 | 哇!用R也可以跑Python了

     大数据文摘作品   编译:大茜、钱天培   R还是Python?   真是个千古难题!   如果你主要从事数据分析、统计建模和可视化,R大概是你的不二之选。但如果你还想来搞点深度学...

大数据文摘
04/19
0
0
Python操作小结(mysql、txt\json、crontab、http)

有段时间没有使用python了,对它的语法有点生疏,花了几个小时熟悉,期间发现很多小细节不清楚。为了下次能快速上手,避免重复犯错,我将python使用过程中的一些问题在这篇博文中记录小结一下...

lilugoodjob
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于pip

我在更新pip的时候碰到的一些问题。 第一次安装,直接安装就ok了,所以也没研究,没想到后来由于安装了python2.x和python3.x之后出现了问题。 如果要将pip更新到最新版本需要指明是哪个版本的...

恰东
34分钟前
1
0
对硬盘进行分区时,GPT和MBR有什么区别

在Windows 8或8.1中设置新磁盘时,系统会询问你是想要使用MBR还是GPT分区。GPT是一种新的标准,并在逐渐取代MBR。 GPT带来了很多新特性,但MBR仍然拥有最好的兼容性。GPT并不是Windows专用的...

yizhichao
36分钟前
3
0
区块链教程btcpool矿池源码分析StratumServer模块解析

兄弟连区块链教程btcpool矿池源码分析StratumServer模块解析 核心机制总结 接收的job延迟超过60秒将丢弃 如果job中prevHash与本地job中prevHash不同,即为已产生新块,job中isClean状态将置为...

兄弟连区块链入门教程
37分钟前
1
0
JS中的异常捕获

JS中的异常捕获(目的:把抛出的错误捕获到,不让其阻断浏览器的继续执行) try{//需要执行的JS代码(可能会报错)}catch(e){//try中代码报错,会执行catch}finally{//不管try中的代...

NDweb
47分钟前
2
0
ObjectARX_AcDb2dPolyline复杂实体

1遍历:访问或者编辑复杂实体也需要通过特定的方式。 AcDb2dPolyline的顶点信息不能通过AcDb2dPolyline对象直接得到,需要遍历AcDb2dPolyline所包含的AcDb2dVertex对象: void IteratePolylin...

一个小妞
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部