热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python模块:array数组模块

http:blog.csdn.netpipisorryarticledetails62889137数组模块array简介在Python中,列表是一个动态的指针数组

http://blog.csdn.net/pipisorry/article/details/62889137


数组模块array简介

在Python中,列表是一个动态的指针数组,而array模块所提供的array对象则是保存相同类型的数值的动态数组。list的内存分析参考[python数据类型的内存分析 ]。

数组并不是Python中内置的标配数据结构,不过拥有array模块我们也可以在Python中使用数组结构。

python 有提供一个array模块,用于提供基本数字,字符类型的数组。用于容纳字符号,整型,浮点等基本类型。这种模块主要用于二进制上的缓冲区,流的操作。


数据类型


Type codeC TypePython TypeMinimum size in bytesNotes
'b'signed charint1 
'B'unsigned charint1 
'u'Py_UNICODEUnicode character2(1)
'h'signed shortint2 
'H'unsigned shortint2 
'i'signed intint2 
'I'unsigned intint2 
'l'signed longint4 
'L'unsigned longint4 
'q'signed long longint8(2)
'Q'unsigned long longint8(2)
'f'floatfloat4 
'd'doublefloat8
Note:
这里只是规定了对应的最小字节,而不是真实占用的内存字节数!!!如lz使用的64位机测试的'i'对应的字节数为4而不是2(32位机才是2吧可能)!

In[4]: a = array.array('i')
In[5]: a.__sizeof__()
64
In[6]: a = array.array('i', [1])
In[7]: a.__sizeof__()
68

In[10]: a.itemsize
4

皮皮blog



array模块的使用


初始化

array实例化可以提供一个参数来描述允许那种数据类型,还可以有一个初始的数据序列存储在数组中。
数组配置为包含一个字节序列,用一个简单的字符串初始化。

class array.array(typecode[, initializer])


A new array whose items are restricted by typecode, and initializedfrom the optional initializer value, which must be a list, abytes-like object, or iterable over elements of theappropriate type.

If given a list or string, the initializer is passed to the new array’sfromlist(), frombytes(), or fromunicode() method (see below)to add initial items to the array. Otherwise, the iterable initializer ispassed to the extend() method.


import array

s = 'This is the array.'

a = array.array('c', s)

print 'As array :', a

As array : array('c', 'This is the array.')


数组操作

类似于其他python序列,可以采用同样方式扩展和处理array。支持的操作包括分片,迭代以及向末尾增加元素。

创建一个interger类型的数组

myarr &#61; array(’i‘)  <——–创建数组

myarr.append(3)   <——–追加元素

取数组的值&#xff0c;通过下标

num1 &#61; myarr[0]   <———–第一个值

删除最后一个
myarr.pop()
删除第一个指定的X
myarr.remove(x)
指定位置&#xff0c;插入值
myarr.insert(6,10)
6表示下标&#xff0c;10表示要插入的值
数组反序
myarr.reverse()

array.count(x)

    Return the number of occurrences of x in the array.
array.itemsize
    The length in bytes of one array item in the internal representation.
array.index(x)
    Return the smallest i such that i is the index of the first occurrence of x in the array.


import array
a &#61; array.array(&#39;i&#39;, xrange(3))
print &#39;Initial :&#39;, a
a.extend(xrange(3))
print &#39;Extended:&#39;, a
print &#39;slice: :&#39;, a[2:5]

Initial : array(&#39;i&#39;, [0, 1, 2])
Extended: array(&#39;i&#39;, [0, 1, 2, 0, 1, 2])
slice: : array(&#39;i&#39;, [2, 0, 1])


数组和文件输入输出

可以使用高效读/写文件的专用内置方法将数组的内容写入文件或从文件读取数组。
import array
import binascii
import tempfile
a &#61; array.array(&#39;i&#39;, xrange(5))
output &#61; tempfile.NamedTemporaryFile()
a.tofile(output.file)
output.flush

with open(output.name, &#39;rb&#39;) as input:
  raw_input &#61; input.read()
  print &#39;Raw Contents:&#39;, binascii.hexlify(raw_data)
  input.seek(0)
  a2 &#61; array.array(&#39;i&#39;)
  a2.fromfile(input, len(a))
  print &#39;A2: &#39;, a2


候选字节顺序

如果数组中的数据没有采用固有的字节顺序&#xff0c;或者在发送到一个采用不同字节顺序的系统前需要交换顺序&#xff0c;可以在python转换整个数组而无须迭代处理每个元素。
import array
import binascii
def to_hex(a):
  chars_per_item &#61; a.itemsize * 2
  hex_version &#61; binascii.hexlify(a)
  num_chunks &#61; len(hex_version) / chars_per_item
  for i in xrange(num_chunks):
    start &#61; i * chars_per_item
    end &#61; start &#43; chars_per_item
    yield hex_version[start:end]
a1 &#61; array.array(&#39;i&#39;, xrange(5))
a2 &#61; array.array(&#39;i&#39;, xrange(5))
a2.byteswap()
fmt &#61; &#39;%10s %10s %10s %10s&#39;
print fmt % (&#39;A1_hex&#39;, &#39;A1&#39;, &#39;A2_hex&#39;, &#39;A2&#39;)
print fmt % ((&#39;-&#39; * 10,) * 4)
for value in zip(to_hex(a1), a1, to_hex(a2), a2):
  print fmt % value
byteswap()会交换C数组中元素的字节顺序&#xff0c;比在python中循环处理数据高效的多。
  A1_hex     A1   A2_hex     A2
---------- ---------- ---------- ----------
 00000000     0  00000000     0
 01000000     1  00000001  16777216
 02000000     2  00000002  33554432
 03000000     3  00000003  50331648
 04000000     4  00000004  67108864

from: http://blog.csdn.net/pipisorry/article/details/62889137

ref: [array — Efficient arrays of numeric values]



推荐阅读
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • Python中程序员的面试题有哪些
    小编给大家分享一下Python中程序员的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 验证识别之你讲武德了吗?
    说说那个试用版的打包软件,既然是试用版肯定要加个试用期限,但是里面的pb模型并没有放识别率最好的那个,而是放了一个识别率中等 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 尾部|柜台_Java并发线程池篇附场景分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java并发-线程池篇-附场景分析相关的知识,希望对你有一定的参考价值。作者:汤圆个人博客 ... [详细]
author-avatar
88943w
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有