📜  Python列表和数组的比较(1)

📅  最后修改于: 2023-12-03 15:34:27.864000             🧑  作者: Mango

Python列表和数组的比较

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中内置的systime模块进行测试。具体实现方式如下:

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 秒,效率约为列表的八倍。

因此,在对大量同一类型的数据进行操作时,应该优先选择使用数组。但是,在对数据进行较为灵活的操作时,列表可能更为适合。

总结
  • 列表和数组都可以用于存储数据,但数组只可以用于存储同一种类型的数据,使用连续的内存空间来实现。
  • 在对大量同一类型的数据进行操作时,数组的效率要高于列表,但在对数据进行较为灵活的操作时,列表可能更为适合。