📅  最后修改于: 2023-12-03 15:34:27.864000             🧑  作者: Mango
Python中常用的数据容器有列表(list)和数组(array)两种。虽然它们都可以用于存储数据,但在某些场景下,数组的效率要高于列表。
列表和数组都可以用于存储数据,对于单个元素的访问、添加、修改操作等实现方式也类似。比如可以使用下标来访问列表和数组中的元素。
a_list = [1, 2, 3]
an_array = array.array('i', [1, 2, 3])
print(a_list[1]) # 2
print(an_array[1]) # 2
# 修改列表和数组中的元素
a_list[0] = 5
an_array[0] = 5
print(a_list) # [5, 2, 3]
print(an_array) # array('i', [5, 2, 3])
列表是Python中内置的数据类型,可以保存不同类型的数据,列表的实现方式类似于链表。
而数组在Python中需要通过array
模块来使用,数组中只可以保存同一种类型的数据,且使用连续的内存空间来实现。因此,对于大量数据的存储和访问,数组的效率要高于列表。
下面给出列表和数组在内存使用和遍历访问时间效率方面的比较。我们将使用Python中内置的sys
和time
模块进行测试。具体实现方式如下:
import sys
import time
import array
# 让列表和数组均保存 10^7 个整数
a_list = list(range(10**7))
an_array = array.array('i', range(10**7))
# 获取列表和数组占用的内存大小
list_size = sys.getsizeof(a_list)
array_size = sys.getsizeof(an_array)
print(f"List size: {list_size}")
print(f"Array size: {array_size}")
# 遍历访问列表和数组中的所有元素,分别计算时间
start = time.time()
for i in a_list:
pass
end = time.time()
list_time = end - start
start = time.time()
for i in an_array:
pass
end = time.time()
array_time = end - start
print(f"List traversal time: {list_time}")
print(f"Array traversal time: {array_time}")
在存储 10^7 个整数的情况下,列表占用的内存空间为 81528056 字节,而数组占用的空间只有 40000056 字节,约为列表的一半。
而在遍历访问 10^7 个元素时,列表需要 2.52 秒,而数组仅需 0.31 秒,效率约为列表的八倍。
因此,在对大量同一类型的数据进行操作时,应该优先选择使用数组。但是,在对数据进行较为灵活的操作时,列表可能更为适合。