码迷,mamicode.com
首页 > 编程语言 > 详细

5.6 array--高效的数值类型数组

时间:2016-01-23 13:20:11      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

本模块定义高效的数值类型数组,主要包括类型有:字符、整数、浮点数。数值类型数组与列表比较相似,主要区别在于列表可以放入不同类型的元素,而类型数组只能放入一种类型的元素。类型数组只支持下面的类型:

类型字符

C类型

Python类型

占用最小的字节

备注

‘b‘

signed char

int

1

 

‘B‘ 

unsigned char

int

1

 

‘u‘

Py_UNICODE

Unicode haracter

 

‘h‘

signed short

int

2

 

‘H‘

unsigned short

int

2

 

‘i‘

signed int

int

2

 

‘I‘

unsigned int

int

2

 

‘l‘

signed long

int

4

 

‘L‘

unsigned long

int

4

 

‘q‘

signed long long

int

8

 

‘Q‘

unsigned long long

int

8

 

‘f‘

float

float

4

 

‘d‘ 

double

float

8

 

实际以上类型的大小,是基于架构上的实现,更具体一点就是取决C语言的实现。

 

class array.array(typecode[, initializer]) 

使用类型码typecode创建一个新的数组。参数initializer是提供初始化的值,可以是一个列表,一个字节数组,或者是一个可迭代的对象。如果是一个列表或字符串,会使用fromlist()frombytes()fromunicode()函数来分解相关内容,并插入到数组里。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(a)

结果输出如下:

array(‘l‘, [1, 2, 3, 4, 5])

 

array.typecodes 

返回array支持所有的类型代码。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(array.typecodes)

结果输出如下:

bBuhHiIlLqQfd

 

array.typecode 

返回创建此数组的类型代码。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(a.typecode)

print(a[0], a[1])

结果输出如下:

l

1 2

 

array.itemsize 

内部表示一项占用字节的大小。比如32位的整数是占用4字节。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(a.itemsize)

print(a[0:3])

结果输出如下:

4

array(‘l‘, [1, 2, 3])

 

array.append(x) 

添加一项x到数组后面。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(a.itemsize)

a.append(8)

print(a)

结果输出如下:

4

array(‘l‘, [1, 2, 3, 4, 5, 8])

 

array.buffer_info() 

返回一个元组(内存地址, 长度)。主要为了兼容旧的C代码而使用的,新的代码需要使用buffer protocol协议。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

print(a.itemsize)

print(a.buffer_info())

结果输出如下:

4

(2729208, 5)

 

array.byteswap() 

把数组里所有元素进行字节顺序变换“Byteswap”。仅支持1248个字节大小。主要用来变换不同机器之间的字节顺序。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

a.byteswap()

print(a)

结果输出如下:

array(‘l‘, [16777216, 33554432, 50331648, 67108864, 83886080])

 

array.count(x) 

返回指定元素x在数组里出现的次数。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5, 3, 3, 3])

print(a.count(8))

print(a.count(3))

结果输出如下:

0

4

 

array.extend(iterable)

把迭代器iterable对象里的元素添加到数组里。如果iterable是数组,要保持类型一致,否则会抛出异常TypeError。如果不是数组类型对象,则需要可以把类型转换为一致。

例子:

#python 3.4

import array

 

a = array.array(‘l‘, [1, 2, 3, 4, 5])

b = array.array(‘l‘, [1, 9, 3])

a.extend(a)

print(a)

结果输出如下:

array(‘l‘, [1, 2, 3, 4, 5, 1, 2, 3, 4, 5])

 

array.frombytes(s) 

从字符串s添加到数组里面。

 

array.fromfile(f, n) 

从文件对象f里读取n项,并添加在数组后面。如果文件里少于n项则会抛出异常EOFError,但那些可用的项仍会添加到数组里面。

例子:

#python 3.4

import array

import binascii

import tempfile

 

a = array.array(‘i‘, range(5))

print(‘A1: ‘, a)

output = tempfile.NamedTemporaryFile(delete=False)

a.tofile(output.file)

output.flush()

name = output.name

print(name)

output.close()

 

b = array.array(‘i‘)

with open(name, ‘rb‘) as input:

    b.fromfile(input, len(a))

    print(b)

结果输出如下:

A1:  array(‘i‘, [0, 1, 2, 3, 4])

C:\Users\xxxx\AppData\Local\Temp\tmp_o3px5vs

array(‘i‘, [0, 1, 2, 3, 4])

 

array.fromlist(list) 

从列表里添加数组项。等同于:for x in list: a.append(x)。如果类型不相同,数组内容不会改变。

例子:

#python 3.4

import array

import binascii

import tempfile

 

a = array.array(‘i‘)

l = [3, 6, 8, 9]

a.fromlist(l)

print(a)

结果输出如下:

array(‘i‘, [3, 6, 8, 9])

 

array.fromstring() 

本函数的功能已经失效。可以使用frombytes()函数。

 

array.fromunicode(s) 

从一个Unicode字符串扩展数组。数组类型必须是unicode的类型,否则抛出ValueError异常。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘ddd‘)

a.fromunicode(‘abc‘)

print(a)

结果输出如下:

array(‘u‘, ‘dddabc‘)

 

array.index(x) 

返回在数组里最早出现元素x的最小的索引值。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

print(a.index(‘d‘))

结果输出如下:

4

 

array.insert(i, x) 

插入一个元素x在位置i之前。如果i是负值表示从数组后面计算开始。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

a.insert(3, ‘a‘)

print(a)

结果输出如下:

array(‘u‘, ‘567a8ddd‘)

 

array.pop([i]) 

删除指定位置i的元素,缺省的值为-1,表示删除数组最后一个元素。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

a.pop()

a.pop(1)

print(a)

结果输出如下:

array(‘u‘, ‘578dd‘)

 

array.remove(x) 

从数组里删除第一次出现元素x相同的值。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

a.remove(‘8‘)

print(a)

结果输出如下:

array(‘u‘, ‘567ddd‘)

 

array.reverse() 

把数组的元素反序排列。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

print(a)

a.reverse()

print(a)

结果输出如下:

array(‘u‘, ‘5678ddd‘)

array(‘u‘, ‘ddd8765‘)

 

array.tobytes() 

把数组转换为电脑内部表示,并返回bytes类型数组。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

print(a.tobytes())

输出结果如下:

b‘5\x006\x007\x008\x00d\x00d\x00d\x00‘

 

array.tofile(f) 

把所有项的值(作为内部表示的值)写到文件对象f

例子:

#python 3.4

import array

import binascii

import tempfile

 

a = array.array(‘i‘, range(5))

print(‘A1: ‘, a)

output = tempfile.NamedTemporaryFile(delete=False)

a.tofile(output.file)

output.flush()

name = output.name

print(name)

output.close()

 

b = array.array(‘i‘)

with open(name, ‘rb‘) as input:

    b.fromfile(input, len(a))

    print(b)

结果输出如下:

A1:  array(‘i‘, [0, 1, 2, 3, 4])

C:\Users\xxxx\AppData\Local\Temp\tmp_o3px5vs

array(‘i‘, [0, 1, 2, 3, 4])

 

array.tolist() 

把数组转换为列表表示。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

print(a.tolist())

结果输出如下:

[‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘d‘, ‘d‘, ‘d‘]

 

array.tostring() 

转换为字符串。此函数将要丢弃,应使用tobytes()函数。

 

array.tounicode() 

转换数组为unicode字符串。

例子:

#python 3.4

import array

 

a = array.array(‘u‘, ‘5678ddd‘)

print(a.tounicode())

结果输出如下:

5678ddd

 

蔡军生 QQ:9073204  深圳

5.6 array--高效的数值类型数组

标签:

原文地址:http://blog.csdn.net/caimouse/article/details/50569061

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!