每日一“酷”之array

array--国定类型数据序列

array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型。

1、初始化

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

  

1 import array
2 import binascii
3 s = ‘This is the array.‘
4 a = array.array(‘c‘,s)
5
6 print ‘As string:‘, s
7 print ‘As array :‘, a
8 print ‘As hex   :‘, binascii.hexlify(a)

运行结果:

这个例子总,数组配置为包含一个字节序列,用一个简单的字符串初始化,array.array(‘c‘,‘xxxx‘) 中的‘c’代表是字符串的意思。

其中binascii模块的作用是:其中包含很多在二进制和ASCII编码的二进制表示转换的方法。hexlify(data) 作用是返回的二进制数据的十六进制表示。

2、处理数组

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

 1 import array
 2  3
 4 a = array.array(‘i‘,xrange(3))
 5 print ‘Initial :‘, a
 6
 7 a.extend(xrange(3))
 8 print ‘Extended:‘,a
 9
10 print ‘Slice    :‘,a[2:5]
11
12 print ‘Iterator‘
13 print list(enumerate(a))

执行结果:

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

使用enumerate(data)迭代数据,返回的是序列的每条记录的序号和内容组成的元组

3、数组与文件

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

  

 1 import array
 2 import binascii
 3 import tempfile
 4
 5 a = array.array(‘i‘,xrange(5))
 6 print ‘A1:‘,a
 7
 8 output = tempfile.NamedTemporaryFile()
 9 a.tofile(output.file)
10 output.flush()
11
12 with open(output.name,‘rb‘) as input:
13     raw_data = input.read()
14     print ‘Raw Contents:‘,binascii.hexlify(raw_data)
15
16     input.seek(0)
17     a2 = array.array(‘i‘)
18     a2.fromfile(input, len(a))
19     print ‘A2:‘,a2

 执行结果:

  

 这个例子展示了直接从二进制文件读取原始数据,将它读入一个新的数组,并吧字节转换为适当的类型。

with 用法(可以增加代码的友好度,它自身可以关闭文件无需调用close()方法):

  with open(‘a.txt‘) as f:

    print f.readlines()

4、候选字节顺序

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

 1 import array
 2 import binascii
 3
 4 def to_hex(a):
 5     chars_per_item = a.itemsize * 2
 6     hex_version = binascii.hexlify(a)
 7     num_chunks = len(hex_version) / chars_per_item
 8     for i in xrange(num_chunks):
 9         start = i * chars_per_item
10         end = start + chars_per_item
11         yield hex_version[start:end]
12
13 a1 = array.array(‘i‘,xrange(5))
14 a2 = array.array(‘i‘,xrange(5))
15 a2.byteswap()
16
17 fmt = ‘%10s %10s %10s %10s‘
18 print fmt % (‘A1 hex‘,‘A1‘,‘A2 hex‘,‘A2‘)
19 print fmt % ((‘-‘*10,) * 4)
20 for values in zip(to_hex(a1),a1,to_hex(a2),a2):
21     print fmt % values

处理结果:
  

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

如果 yield  存在在一个函数中那么整个函数就是 一个Generator 具体用法请参照:http://blog.csdn.net/scelong/article/details/6969276

zip()函数 可以接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表

时间: 2024-10-19 09:35:45

每日一“酷”之array的相关文章

每日一“酷”之heapq

作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树).可以使用以下如下方式组织的列表或数表示,即元素N的子元素位于2*N+1和2*N+2.这种布局允许原地重新组织堆,从而不必再增加或删除元素时分配大量内存. 最大堆确保父节点大于或等于其两个子节点.最小堆要求父节点小雨或等于其子节点.Python的heqpq模块实现了一个最小堆. 1.

每日一“酷”之pprint

pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅读.输出尽可能放在一行上,分解为多行时则需要缩进. 这一节中的列子都用到了pprint_data.py,其中包含一下数据 1 data = [(1,{'a':'A','b':'B','c':'C','d':'D'}), 2 (2,{'e':'E','f':'F','g':'G','h':'H', 3

每日一“酷”之copy

Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1.  浅副本 copy()创建的浅副本(shallow copy)是一个新容器,其中填充原对象内容的引用.建立list对象的一个浅副本时,会构造一个新的list,并将原对象的元素追加到这个list. 1 import copy 2 3 class MyClass(object): 4 def __init__(self,name):

每日一“酷”之bisect

作用:维护有序列表,而不必在每次想列表增加一个元素时调用sort排序 bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序.有些情况下,这比反复对一个了表序列更高效,另外也比构建一个大列表之后再显式对齐排序更为高效 1.有序插入 使用insort()按有序顺序像一个列表中插入元素 1 import bisect 2 import random 3 random.seed(1) 4 5 print 'New Pos Contents' 6 print '--- --- ----

每日一“酷”之difflib

介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列列表): text1 = """ We all know that English is very useful. Many people in the world speak English. So more and more people in China study it.

每日一“酷”之Cookie

Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有标准那么严格,因为,MSIE 3.0X并不支持整个标准. RFC 2109 HTTP状态管理机制 1.  创建和设置Cookie 可以用Cookie为机遇浏览器的应用实现状态管理,因此,Cookie通常由服务器设置,并由客户存储和返回.下面是一个创建cookie的最简单的例子. import Coo

每日一“酷”之textwrap

介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 1 sample_text = ''' 2 I’m very happy and I like to make friends with others. 3 I also like singing but traveling is my favorite, I have been to many interesting places in Chin

每日一“酷”之Queue

Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线程之间安全地传递消息或其他数据.它会为调用者处理锁定,使多个线程可以安全第处理同一个Queue实例.Queue的大小(其中包含的元素个数)可能要受限制,,以限制内存使用或处理. 1.  基本FIFO队列 Queue类实现一个基本不能的先进先出容器.使用put()将元素增加到序列一段,使用get()从

每日一“酷”之string

介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理string和unicode对象. 一. 函数 1.capwords()的作用是将一个字符串中所有单词的首字母大写: 1 import string 2 s = 'We believe one thing,today is difficult,tomorrow is more difficult,but