我想详尽地分析用于排序小数组的子程序,并且需要一种方法来生成特定长度的所有唯一排序的数组.在Python中,这将是具有非负整数作为元素的列表,并且最好在可能时使用最小整数.例如,N = 3:
[[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[0,1,2],
[0,2,1],
[1,0,0],
[1,0,1],
[1,0,2],
[1,1,0],
[1,2,0],
[2,0,1],
[2,1,0]]
Run Code Online (Sandbox Code Playgroud)
[1,1,1]并[2,2,0]没有在上面的列表中属于,因为[0,0,0]并[1,1,0]分别具有相同的相对顺序,同时使用较小的整数.
因此,之前已多次询问有关for循环速度与while循环速度的问题.for循环应该更快.
但是,当我在Python 3.5.1中测试它时,结果如下:
timeit.timeit('for i in range(10000): True', number=10000)
>>> 12.697646026868842
timeit.timeit('while i<10000: True; i+=1',setup='i=0', number=10000)
>>> 0.0032265179766799434
Run Code Online (Sandbox Code Playgroud)
while循环运行速度比for循环快3000倍!我也试过为for循环预生成一个列表:
timeit.timeit('for i in lis: True',setup='lis = [x for x in range(10000)]', number=10000)
>>> 3.638794646750142
timeit.timeit('while i<10000: True; i+=1',setup='i=0', number=10000)
>>> 0.0032454974941904524
Run Code Online (Sandbox Code Playgroud)
这使得for循环速度提高了3倍,但差异仍然是3个数量级.
为什么会这样?
python ×2
arrays ×1
generator ×1
loops ×1
performance ×1
permutation ×1
python-3.x ×1
sorting ×1