python如何创建一个列表_在python中创建列表的最佳和/或最快方法
在python中,據我所知,至少有3到4種方法來創建和初始化給定大小的列表:
簡單循環append:
my_list =[]fori inrange(50):my_list.append(0)
簡單循環+=:
my_list =[]fori inrange(50):my_list +=[0]
列表理解:
my_list =[0fori inrange(50)]
列表和整數乘法:
my_list =[0]*50
在這些例子中,我認為只有列表只有50個元素會有任何性能差異,但如果我需要一個包含一百萬個元素的列表呢?使用xrange會有什么改進嗎?哪個是在python中創建和初始化列表的首選/最快方法?
解決方案
讓我們運行一些時間測試*timeit.timeit:
>>>fromtimeit importtimeit
>>>>>># Test 1>>>test ="""
... my_list = []
... for i in xrange(50):
... my_list.append(0)
... """>>>timeit(test)22.384258893239178>>>>>># Test 2>>>test ="""
... my_list = []
... for i in xrange(50):
... my_list += [0]
... """>>>timeit(test)34.494779364416445>>>>>># Test 3>>>test ="my_list = [0 for i in xrange(50)]">>>timeit(test)9.490926919482774>>>>>># Test 4>>>test ="my_list = [0] * 50">>>timeit(test)1.5340533503559755>>>
如您所見,最后一種方法是迄今為止最快的方法。
但是,它應該只用一成不變的物品(如整數)使用。這是因為它將創建一個列表,其中包含對同一項的引用。
以下是演示:
>>>lst =[[]]*3>>>lst
[[],[],[]]>>># The ids of the items in `lst` are the same>>>id(lst[0])28734408>>>id(lst[1])28734408>>>id(lst[2])28734408>>>
這種行為通常是不受歡迎的,并且可能導致代碼中的錯誤。
如果你有可變項(例如列表),那么你應該使用仍然非??斓牧斜砝斫?#xff1a;
>>>lst =[[]for_ inxrange(3)]>>>lst
[[],[],[]]>>># The ids of the items in `lst` are different>>>id(lst[0])28796688>>>id(lst[1])28796648>>>id(lst[2])28736168>>>
*注意:在所有測試中,我替換range為xrange。由于后者返回迭代器,因此它應該總是比前者快。
本文首發于Python黑洞網,博客園同步更新
總結
以上是生活随笔為你收集整理的python如何创建一个列表_在python中创建列表的最佳和/或最快方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis实例python_生产消费者模
- 下一篇: python excel 转json_P