什么更快:重新排序列表列表或重新排序索引列表?

时间:2015-04-09 18:45:02

标签: python python-2.7

什么更快:重新排序列表列表或重新排序整数列表?

我应该首先将主列表表示为内部列表的索引列表(将其表示为序数类型列表),还是我可以直接使用列表列表?

1 个答案:

答案 0 :(得分:4)

通过此测试,您可以看到它们花费的时间相同:

a = range(100)
b = [range(10) for _ in range(100)]

if __name__ == '__main__':
    from timeit import repeat
    n = 500
    r = 5

    print min(repeat('shuffle(a)', setup='from random import shuffle;from __main__ import a', repeat=r, number=n))
    print min(repeat('shuffle(b)', setup='from random import shuffle;from __main__ import b', repeat=r, number=n))

我注意到重新排序整数列表的轻微速度优势,但它既不重要,也不足以保证使用索引列表。有时,重新排序列表更快,反之亦然。

这是因为对象被作为变量存储和传递的引用值绑定到,而所有是Python中的对象,甚至是int类型。所以"重新排序列表中的列表"相当于"重新排序列表中的数字"因为你所做的所有真的正在重新排序列表/数字的引用列表。

您可以将参考值视为内存中指向对象实际位置的地址。用Python术语来说,它是对象的id。它有点类似于C / C ++中的指针值。在CPython中,对象的id实际上只是它在内存中的地址,但这是一个实现细节,因此不要指望它在Python实现中是相同的。