性能:多维列表与平面列表

时间:2014-12-18 20:21:00

标签: python arrays performance multidimensional-array

我在python中使用非常大的列表列表来做一些数学运算,但后来它开始滞后很多(约20秒)。然后我开始比较多维和平面列表。

代码

from timeit import timeit
from sys import getsizeof
print("Literals:")
print("Flat list: {} seconds".format(timeit("[1, 2, 3, 1, 2, 3, 1, 2, 3]")))
print("Mult list: {} seconds".format(
    timeit("[[1, 2, 3], [1, 2, 3], [1, 2, 3]]")))
a = list(range(100))
b = [list(range(i * 10, i * 10 + 10)) for i in range(10)]
print("\nSizes:")
print("Flat list: {} bytes".format(getsizeof(a)))
print("Mult list: {} bytes".format(getsizeof(b)))
print("\nAppending:")
print("Flat list: {} seconds".format(
    timeit("a.extend((1, 2, 3))", "a = [1, 2, 3, 1, 2, 3]")))
print("Mult list: {} seconds".format(
    timeit("b.append([1, 2, 3])", "b = [[1, 2, 3], [1, 2, 3]]")))

输出

Literals:
Flat list: 0.17474557721948392 seconds
Mult list: 0.39777811142990527 seconds

Sizes:
Flat list: 508 bytes
Mult list: 100 bytes

Appending:
Flat list: 0.11419465630051207 seconds
Mult list: 0.17854960247173668 seconds

这告诉我多维列表需要更长时间才能更改,但占用的内存更少,但我无法确定,因为许多时间需要不同的方法,可能需要更多或更少的时间。哪种列表类型更有效,以及在哪种情况下?

1 个答案:

答案 0 :(得分:0)

getsizeof仅返回最外面列表的内存大小。此外,与列表上的计算相比,创建列表所需的时间可以忽略不计。对于具有大量数字的数字性能,请使用numpy。