原文地址: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/
更多教程:阿貓學編程