Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';s更快:对列表列表进行重新排序还是对索引列表进行重新排序?_Python_Python 2.7 - Fatal编程技术网

Python 什么';s更快:对列表列表进行重新排序还是对索引列表进行重新排序?

Python 什么';s更快:对列表列表进行重新排序还是对索引列表进行重新排序?,python,python-2.7,Python,Python 2.7,什么更快:对列表进行重新排序还是对整数列表进行重新排序 我应该首先将主列表表示为内部列表的索引列表(将其表示为有序类型的列表),还是可以直接使用列表列表?从这个测试中,您可以看到它们花费的时间大致相同: a = range(100) b = [range(10) for _ in range(100)] if __name__ == '__main__': from timeit import repeat n = 500 r = 5 print min(re

什么更快:对列表进行重新排序还是对整数列表进行重新排序


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

从这个测试中,您可以看到它们花费的时间大致相同:

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))
我注意到对int列表重新排序有一点速度优势,但它既不重要,也不一致,不足以保证使用索引列表。有时,对列表列表进行重新排序会更快,反之亦然

这是因为对象被绑定到作为变量存储和传递的引用值,在Python中,所有东西都是对象,甚至是
int
类型。所以“在列表中对列表进行重新排序”等同于“在列表中对数字进行重新排序”,因为您真正做的是分别对列表/数字的引用列表进行重新排序


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

如何对它们进行排序?如果性能至关重要,您是否尝试过比较测试?试一试,并告诉uscan您添加了两个选项的示例?两者都具有相同的big-O复杂性,因此请尝试并衡量它们。