为什么python处理排序列表比未排序列表花费更多时间

时间:2018-03-21 06:46:34

标签: python

示例:

import cProfile, random, copy
def foo(lIn): return [i*i for i in lIn]
lIn = [random.random() for i in range(1000000)]
lIn1 = copy.copy(lIn)
lIn2 = sorted(lIn1)
cProfile.run('foo(lIn)')
cProfile.run('foo(lIn2)')

结果:

在0.075秒内进行3次函数调用

订购者:标准名称


   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.005    0.005    0.075    0.075 :1()
        1    0.070    0.070    0.070    0.070 test.py:716(foo)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

在0.143秒内调用3个函数

订购者:标准名称

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.006    0.006    0.143    0.143 :1()
        1    0.137    0.137    0.137    0.137 test.py:716(foo)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}



1 个答案:

答案 0 :(得分:0)

尚未真的答案,但评论余量对此来说有点小。

由于if (result.IsSuccessStatusCode) { ModelState.Clear(); return Json(result.StatusCode, JsonRequestBehavior.AllowGet); } return View(model); 会产生相同的结果,我决定实施自己的random.shuffle()功能,并改变我洗牌的次数。 (在下面的示例中,它是shufflexrange的参数。

300000

其他代码几乎没有修改:

def my_shuffle(array):
    for _ in xrange(300000):
        rand1 = random.randint(0, 999999)
        rand2 = random.randint(0, 999999)
        array[rand1], array[rand2] = array[rand2], array[rand1]

我得到的第二个import cProfile, random, copy def foo(lIn): return [i*i for i in lIn] lIn = [random.random()*100000 for i in range(1000000)] lIn1 = copy.copy(lIn) my_shuffle(lIn1) cProfile.run('foo(lIn)') cProfile.run('foo(lIn1)') 的结果取决于我洗牌的次数:

10000 0.062
100000 0.082
200000 0.099
400000 0.122
800000 0.137
8000000 0.141
10000000 0.141
100000000 0.248

看起来你的阵列越乱,操作时间越长,达到某一点。 (我不知道最后的结果。花了很长时间才在背景中做了一些其他的事情并且真的不想重试。)