什么更快:重新排序列表列表或重新排序整数列表?
我应该首先将主列表表示为内部列表的索引列表(将其表示为序数类型列表),还是我可以直接使用列表列表?
答案 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实现中是相同的。