import array as arr # (1)
import random
import time
from array import array
# 获取包含可用类型码的字符串, 各类型码详细信息键下方文档注释
codes = arr.typecodes
print(codes)
# 使用array模块下的array类构建一个数组
# 参数列表: 类型码, 初始化器 (其中初始化器为可迭代对象,官方文档说其必须为列表)
a = array('i', range(101))
# array类的重写的__str__方法返回的字符串可以作为eval函数的参数来构建一个新的数组
# 前提是要保证数组在命名空间下的名称为 array(个人感觉这个类的名称应为Array,
# array.array感觉很奇怪,而且容易与其所在模块名冲突。只能通过 (1) 的方式解决)
print(eval(str(a)))
# 使用ArrayType构建一个指定类型的空数组
a0 = arr.ArrayType('i') # 或 array('i')
try:
# 追加一个元素,当元素类型与数组类型不一致时会抛出TypeError
a0.append('ss')
except BaseException as e:
print(e)
a0.append(10)
print(a0)
# 数组也重载了 + 运算符,可以将两个数组拼接在一起
a0 += array('i', [1, 2, 1])
print(a0)
# 索引与切片, 其他序列结构该有的操作数组也一样
print(a0[-1], '\t', a0[::-1])
# 性能测试(与列表对比),
def get_runtime(func, *args, **kwargs):
begin = time.time()
func(*args, **kwargs)
return time.time() - begin
gr = get_runtime
# 双方各做一千万次操作
r = range(10000000)
# 创建
def arr_test0():
a = array('i', r)
def list_test0():
a = list(r)
print(gr(arr_test0), '\t', gr(list_test0))
# 遍历
a = array('i', r)
l = list(r)
def arr_test1():
for i in a:
x = i
def list_test1():
for i in l:
x = i
print(gr(arr_test1), gr(list_test1))
# 随机访问
len_ = len(r) - 1
def arr_test2():
for i in r:
x = a[111]
def list_test2():
for i in r:
x = l[111]
print(gr(arr_test2), gr(list_test2))
# 追加
def arr_test3():
for i in r:
a.append(i)
def list_test3():
for i in r:
l.append(i)
print(gr(arr_test3), gr(list_test3))
# 插入
# 数组一千万次插入太耗时间了...
r = range(300000)
def arr_test4():
for i in r:
a.insert(len(l) - 100, i)
def list_test4():
for i in r:
l.insert(len(l) - 100, i)
print(gr(arr_test4), gr(list_test4))
'''
测试结果: 数组 列表
创建: 0.6748077869415283 0.21828913688659668
遍历: 0.19733977317810059 0.10963153839111328
随机访问: 0.4087049961090088 0.33188533782958984
追加: 1.088365077972412 0.6737616062164307
插入(30万次): 5.103848457336426 0.08870291709899902
其实测试的数据应以双方耗时的比值作为最终结果显示
不然不同硬件配置的电脑及不同的解释器测试的结果差异还是较大的
从测试结果不难看出,列表在各应用场景下的效率是高与数组的
但这也只是千万量级的比对,真实的程序下其实用数组还是列表在时间上的
差异还是可以忽略不计的,但各位,别忽略了一点: 相同长度下,数组要比列
表节省一半的内存! 因为数组有数据类型的约束,整数即 int(
-2^31 ~ 2^31 - 1)4个字节就足以满足一般程序的使用,但Python中的int至少占用24个字节,在列表中的int平均占用8个字节
'''
'''
C类型中的u代表unsigned,类型码在python代码中的表述格式为字符串
其中wchar_t由于平台不同它可能为2或4字节
类型码 C类型 Python类型 字节大小
b char int 1
B u char int 1
u wchar_t Unicode 2
h short int 2
H u short int 2
i int int 4
I u int int 4
l long int 4
L u long int 4
q long long int 8
Q u long long int 8
f float float 4
d double float 8
'''
Python中数组(array)与列表(list)的对比
最新推荐文章于 2024-07-21 09:00:00 发布
本文探讨了Python的array模块,介绍了如何创建和操作数组,包括类型码、数组的追加、拼接以及索引等基本操作。通过性能测试比较了array与list在创建、遍历、随机访问和追加操作上的效率,结果显示虽然list在大多数操作上速度更快,但array在内存使用上更优。文章强调了在特定场景下选择合适的数据结构对于程序性能的重要性。
摘要由CSDN通过智能技术生成