python迭代列表的性能差异

时间:2013-04-17 07:29:35

标签: python performance list iteration

在python 2.7.3中迭代列表列表时,我注意到在更改迭代顺序时的性能差异:

我有200个500000字符串列表的列表。然后我以下列方式进行迭代:

numberOfRows = len(columns[0])
numberOfColumns = len(columns)

t1 = time.clock()
for i in xrange(numberOfRows):
    for j in xrange(numberOfColumns):
        cell = columns[j][i]
print time.clock() - t1

t1 = time.clock()
for i in xrange(numberOfColumns):
    for j in xrange(numberOfRows):
        cell = columns[i][j]
print time.clock() - t1

该程序重复产生类似于此的输出:

33.97
29.39

现在我希望efficient random access on the lists。这4秒来自哪里;它只是缓存吗?

1 个答案:

答案 0 :(得分:1)

我得到像

这样的东西
30.509407822896037
29.88344778700383

代表

columns = [[0] * 500000 for x in range(200)]

如果我用cell = ...替换pass行,我会

8.44722739915369
10.23647023463866

所以创建xrange对象或类似的东西绝对不是问题。

这是列的缓存(不是由Python,通过计算机):如果我使用

columns = [[0] * 500000] * 200

我得到了

27.725353873145195
29.592749434295797

这里,始终使用相同的列对象,并且(几乎)缓存没有区别。因此(约)与pass变体中的时间差异相同。