我测试了两种在python中反转列表的不同方法。importtimeitvalue=[iforiinrange(100)]defrev1():v=[]foriinvalue:v.append(i)v.reverse()defrev2():v=[]foriinvalue:v.insert(0,i)printtimeit.timeit(rev1)printtimeit.timeit(rev2)有趣的是,将值插入第一个元素的第二种方法比第一种方法慢得多。20.485130071673.5116429329这是为什么?从操作上来说,在头部插入一个元素似乎并没有那么昂贵。
注意:我是一名Ruby开发人员,正试图在Python中找到自己的出路。当我想弄清楚为什么有些脚本使用mylist[:]而不是list(mylist)来复制列表时,我对各种方法做了一个快速基准测试复制range(10)(见下面的代码)。编辑:我更新了测试以使用Python的timeit,如下所示。这使得无法直接将它与Ruby进行比较,因为timeit没有考虑循环,而Ruby的Benchmark有,所以Ruby代码仅供引用.python2.7.2Arrayduplicating.Testsrun50000000timeslist(a)18.7599430084copy(a)59.17874
这是我的意思的一个例子:s="""ifx>10:x-=10else:x=0"""importtimeitprint(timeit.timeit(s,setup="x=5",number=99999999))无论设置如何,在我的计算机上输出大约3秒(x=5与x=15,没有区别)如果我要使用更短的代码,首先减少x-=10的代码然后才检查是否x,我会得到更糟糕的结果:s="""x-=10ifx无论x的初始值是否相同,它都会输出大约6秒。是5或15.我知道当x时它会更慢因为我们会先打电话x-=10然后设置x=0而不是简单地设置x一次。事实是,99%的时间x的初始值在我的程序中设置为远高于10的
我在16GB、2.7GHzi5、OSX10.11.5机器上运行Python2.7.10。我在许多不同类型的示例中多次观察到这种现象,因此下面的示例虽然有点做作,但具有代表性。当我的好奇心终于被激起时,这正是我今天早些时候碰巧在做的事情。>>>timeit('unicodedata.category(chr)',setup='importunicodedata,random;chr=unichr(random.randint(0,50000))',number=100)3.790855407714844e-05>>>timeit('unicodedata.category(chr)',s
我有一个超过15000行的数据框对象df,例如:anime_idnamegenrerating1234KiminonawaRomance,Comedy9.315678Stiens;GateSci-fi8.92我正在尝试查找具有特定anime_id的行。a_id="5678"temp=(df.query("anime_id=="+a_id).genre)我只是想知道这个搜索是在常数时间(如字典)还是线性时间(如列表)中完成的。 最佳答案 这是一个非常有趣的问题!我觉得取决于以下几个方面:按索引访问单行(索引已排序且唯一)应该有运行时O
我想知道IPython中的%timeit命令来自docs:%timeit[-n-r[-t|-c]-q-p-o]setup_codeOptions:-n:executethegivenstatementtimesinaloop.Ifthisvalueisnotgiven,afittingvalueischosen.-r:repeattheloopiterationtimesandtakethebestresult.Default:3例如,如果我写:%timeit-n250-r2[i+1foriinrange(5000)]所以,-n250执行了[i+1foriinrange(5000)]2
引用这个PythonListComprehensionVs.Map问题,有人可以解释为什么当列表理解不调用函数时列表理解比map提供更好的结果,即使map中没有lambda函数但给出最差的结果调用函数时的结果?importtimeitprinttimeit.Timer('''[i**2foriinxrange(100)]''').timeit(number=100000)printtimeit.Timer('''map(lambdai:i**2,xrange(100))''').timeit(number=100000)printtimeit.Timer(setup="""defmy_
我不明白为什么python的timeit模块使用bestof3来测量时间。这是我的控制台中的示例:~python-mtimeit'sum(range(10000))'10000loops,bestof3:119usecperloop凭直觉,我会将所有时间放在一起,然后除以循环次数。在所有循环中选择最好的3个的直觉是什么?这似乎有点不公平。 最佳答案 如thedocumentation中所述:default_timer()measurationscanbeaffectedbyotherprogramsrunningonthesamem
我的代码的瓶颈目前是使用ctypes从Python列表到C数组的转换,如所述inthisquestion.一个小实验表明,与其他Python指令相比,它确实很慢:importtimeitsetup="fromarrayimportarray;importctypes;t=[iforiinrange(1000000)];"print(timeit.timeit(stmt='(ctypes.c_uint32*len(t))(*t)',setup=setup,number=10))print(timeit.timeit(stmt='array("I",t)',setup=setup,numb
我想测试2个相同列表之间的处理时间,特别是普通列表和numpy列表。我的代码是importtimeitimportnumpyasnpt=timeit.Timer("range(1000)")printt.timeit()u=timeit.Timer("np.arange(1000)")printu.timeit()t的计算很好,但u的计算出现NameError:globalname'np'isnotdefined被列出。我应该如何编码以获得处理时间? 最佳答案 timeit.Timer类可以以两种不同的方式使用。它可以采用源代码进行