python最新版本 效率_Python:迭代列表与dict项目效率
這取決于您使用的是哪個(gè)版本的Python.在Python 2中,some_dict.items()創(chuàng)建一個(gè)新列表,這會(huì)占用一些額外的時(shí)間并占用額外的內(nèi)存.另一方面,一旦創(chuàng)建了列表,它就是一個(gè)列表,因此在列表創(chuàng)建的開(kāi)銷完成后應(yīng)具有相同的性能特征.
在Python 3中,some_dict.items()創(chuàng)建了一個(gè)視圖對(duì)象而不是列表,我預(yù)計(jì)創(chuàng)建和迭代items()會(huì)比在Python 2中更快,因?yàn)闆](méi)有必要復(fù)制.但是我也期望迭代已經(jīng)創(chuàng)建的視圖比在已經(jīng)創(chuàng)建的列表上迭代要慢一點(diǎn),因?yàn)樽值鋽?shù)據(jù)的存儲(chǔ)有點(diǎn)稀疏,我相信python沒(méi)有好辦法避免迭代每個(gè)bin.字典 – 甚至是空字典.
在Python 2中,一些時(shí)間證實(shí)了我的直覺(jué):
>>> some_dict = dict(zip(xrange(1000), reversed(xrange(1000))))
>>> some_list = zip(xrange(1000), xrange(1000))
>>> %timeit for t in some_list: t
10000 loops, best of 3: 25.6 us per loop
>>> %timeit for t in some_dict.items(): t
10000 loops, best of 3: 57.3 us per loop
對(duì)項(xiàng)目進(jìn)行迭代的速度大約是其兩倍.使用iteritems要快一點(diǎn)……
>>> %timeit for t in some_dict.iteritems(): t
10000 loops, best of 3: 41.3 us per loop
但迭代列表本身與迭代任何其他列表基本相同:
>>> some_dict_list = some_dict.items()
>>> %timeit for t in some_dict_list: t
10000 loops, best of 3: 26.1 us per loop
Python 3可以比Python 2更快地創(chuàng)建和迭代項(xiàng)目(與上面的57.3我們相比):
>>> some_dict = dict(zip(range(1000), reversed(range(1000))))
>>> %timeit for t in some_dict.items(): t
10000 loops, best of 3: 33.4 us per loop
但創(chuàng)建視圖的時(shí)間是可以忽略不計(jì)的;迭代實(shí)際上比列表慢.
>>> some_list = list(zip(range(1000), reversed(range(1000))))
>>> some_dict_view = some_dict.items()
>>> %timeit for t in some_list: t
10000 loops, best of 3: 18.6 us per loop
>>> %timeit for t in some_dict_view: t
10000 loops, best of 3: 33.3 us per loop
這意味著在Python 3中,如果要對(duì)字典中的項(xiàng)進(jìn)行多次迭代,并且性能至關(guān)重要,則可以通過(guò)將視圖緩存為列表來(lái)獲得30%的加速.
>>> some_list = list(some_dict_view)
>>> %timeit for t in some_list: t
100000 loops, best of 3: 18.6 us per loop
總結(jié)
以上是生活随笔為你收集整理的python最新版本 效率_Python:迭代列表与dict项目效率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大家对打孩子是怎么看的啊?[已扎口]
- 下一篇: 双色球3拖4多少钱