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

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


类型字符


C类型


Python类型


占用最小的字节


备注


‘b‘


signed char


int


1


‘B‘


unsigned char


int


1


‘u‘


Py_UNICODE


Unicode haracter


2


‘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”。仅支持1,2,4,8个字节大小。主要用来变换不同机器之间的字节顺序。

例子:

#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  深圳

时间: 2024-10-10 02:06:55

5.6 array--高效的数值类型数组的相关文章

Puppet数据类型中[数值类型,数组的使用] (十四)

本文主要写puppet的数据类型中的数值类型和数组的使用,博主puppet为3.8版本,puppet数组的追加功能测试没有成功,官网也没有给出示例,确定是否已经优化或者取消.官网数据类型连接地址 https://docs.puppet.com/puppet/3.8/lang_datatypes.html puppet的数据类型 目前puppet支持字符串类型.数字.数组.哈希.布尔型.undef和正则表达式. 一.字符串类型 定义字符串需要以双引号("")或单引号('')进行声明,在p

Array.of将数值转换为数组

今天给大家带来的是一个非常简单好用的方法 代码展示: console.log(Array.of(3,11,8)) //输出 [3,11,8] Array.of的方法就是把一组数值转换为数组 console.log(Array.of(3)) //输出 [3] 可以看出,Array.of能够将单个数值也转换为数组! Array.of(3).length //输出1 因为转换成了数组所以可以直接使用数组的方法! 今天分享到此结束,我是涵酱!掰掰 原文地址:https://www.cnblogs.com

数值类型与字节数组之间的相互转换

我们在上文 如何选择使用字符串还是数字呢? 中阐述了使用数值类型的好处,那么问题来了,如何在数值类型与字节数组之间相互转换呢? 我们先看看单个数值类型和字节数组之间的转换,我们以Integer类型为例: public static byte[] intToBytes(int x) {     ByteBuffer intBuffer = ByteBuffer.allocate(Integer.BYTES);     intBuffer.putInt(0, x);     return intBu

C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲

 使用C++风格的数组,不需要管理内存. array要注意不要溢出,因为它是栈上开辟内存. array适用于任何类型 #include<iostream> #include<array> #include<vector>   //C++的标准库 #include<string>   //C++字符串 #include <stdlib.h> using  std::array; //静态数组,栈上 using std::vector; //动态

int类型数组中找出现几次的数的题目总结

1.     题目1:int类型数组中除了一个数出现一次以外,其他数都出现两次,求该数. [分析]全部异或运算即可. 2.     题目2:int类型数组中除了两个数出现一次以外,其他数都出现两次,求这两个数. 参考:http://zhedahht.blog.163.com/blog/static/2541117420071128950682/ [分析]:全部亦或之后得到的数为resultExclusiveOR,找到它的第一个不是0的位,然后将数组按这个位是否为0分成两组,组内全部亦或即可. /

75 int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数。

[本文链接] http://www.cnblogs.com/hellogiser/p/single-number-of-array-with-other-three-times.html [题目] int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数. [分析] C++ Code 123456789101112   int singleNumber(int *a, int n) {     int ones = 0, twos = 0;     for (int i = 0;

前端面试题:高效地随机选取数组中的元素

有前端题目大概是这样的:考虑到性能问题,如何快速从一个巨大的数组中随机获取部分元素. 比如有个数组有100K个元素,从中不重复随机选取10K个元素. 为了演示方便我们将数据简化,先给出方案最后再用大点的数据来测试性能的对比. 常规解法 常规做法倒也不难,生成一个0到数组长度减1的随机数,这个数也就是被选中元素在原数组中的下标,获得该元素后将值保存到另一个数组同时通过数组的splice方法将该元素从原数组中删除,以保证下次不会重复取到. 按以上思路,代码大概就是这样的: //元素总数,为了方便演示

Android java传递int类型数组给C

接着前面的文章<Android java传递int类型数据给C><Android java传递string类型数据给C>,继续实践 实现public native int[] arrElementsIncrease(int[] intArray); 项目布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)

一.数值类型及其调用原理 名称 说明 所占字节 范围 byte 字节型 1 -27~27-1 short 短整型 2 -215~215-1 int 整型 4 -231~231-1 long 长整型 8 -263~263-1 char 字符型 1 0~65535 float 单精度型 4 ±1.5*10-45~±3.4*1038 double 双精度型 8 ±5.0*10-324~±1.7*10308 bool 布尔型 1 只有true和false两个值 static void Main(stri