原文地址:http://www.bugingcode.com/blog/python_module_array.htmlhtml
array 模块是python
中实现的一种高效的数组存储类型。它和list
类似,可是全部的数组成员必须是同一种类型,在建立数组的时候,就肯定了数组的类型。python
Type code | C Type | Python Type | Minimum size in bytes |
---|---|---|---|
'c' | char | character | 1 |
'b' | signed char | int | 1 |
'B' | unsigned char | int | 1 |
'u' | Py_UNICODE | Unicode character | 2 (see note) |
'h' | signed short | int | 2 |
'H' | unsigned short | int | 2 |
'i' | signed int | int | 2 |
'I' | unsigned int | long | 2 |
'l' | signed long | int | 4 |
'L' | unsigned long | long | 4 |
'f' | float | float | 4 |
'd' | double | float | 8 |
建立 一组 int
的数组:编程
#!/usr/bin/python #coding=utf-8 import array a = array.array("i", range(16)) for i in a: print i
下面是一组关于array
的例子,是经过tostring 方法把内部结构转为一个字符串。数组
例子:使用array
模块将一个int的数组转换为字符串。app
import array a = array.array("B", range(16)) # unsigned char b = array.array("h", range(16)) # signed short print a print repr(a.tostring()) print b print repr(b.tostring())
输出以下:spa
array('B', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017' array('h', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) '\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000 \010\000\011\000\012\000\013\000\014\000\015\000\016\000\017\000'
在某种程度上,array 能够被当成一个普通的序列,可是这个序列里不能出现不一样类型的变量。code
例子:把arrays
当成是普通序列orm
import array a = array.array("B", [1, 2, 3]) a.append(4) a = a + a a = a[2:-2] print a print repr(a.tostring()) for i in a: print i,
结果以下:htm
array('B', [3, 4, 1, 2]) '\003\004\001\002' 3 4 1 2
array 模块同时提供了一个高效的方法把原始二进制转换为一个整数系列。blog
例子:把字符串转换为整数数组
import array a = array.array("i", "fish license") # signed integer print a print repr(a.tostring()) print a.tolist()
结果以下:
array('i', [1752394086, 1667853344, 1702063717]) 'fish license' [1752394086, 1667853344, 1702063717]
最后看看array模块是如何肯定当前平台的字节存储顺序。
例子:使用array 模块肯定当前平台的字节存储顺序
import array def little_endian(): return ord(array.array("i",[1]).tostring()[0]) if little_endian(): print "little-endian platform (intel, alpha)" else: print "big-endian platform (motorola, sparc)"
结果以下:
big-endian platform (motorola, sparc)
python
2.0 以上也能够使用 sys.byteorder,它返回结果为“little” 或者“big”:
例子:使用sys.byteorder模块肯定当前平台的字节存储顺序
import sys # available in Python 2.0 and later if sys.byteorder == "little": print "little-endian platform (intel, alpha)" else: print "big-endian platform (motorola, sparc)"
输出以下:
'big-endian platform (motorola, sparc)'
转载请标明来之:http://www.bugingcode.com/
更多教程:阿猫学编程