我正在根据不等于 None 的特定值从一个大型旧列表创建一个新列表。哪种迭代方法更快?
选项 1:
new_list = []
for values in old_list:
if values[4] is not None:
new_list.append(values[4])
选项 2:
new_list = [x for x in old_list if x[4] is not None]
请您参考如下方法:
尝试timeit两者。
但第二个是广泛known to be faster .
基本上 map 比 list comprehension 快,list comprehension 比 for loop 快。
网络上有大量关于这个主题的文献。
编辑:
我 promise 更新会带来实际、有形的结果。这是代码。
import random
import timeit
old_list = [ random.randint(0, 100000) for i in range(0, 100) ]
def floop(old_list):
new_list = []
for value in old_list:
new_list.append(value)
return new_list
def lcomp(old_list):
new_list = [ value for value in old_list ]
return new_list
if __name__=='__main__':
results_floop = timeit.Timer('floop(old_list)', "from __main__ import floop, old_list").timeit()
results_lcomp = timeit.Timer('lcomp(old_list)', "from __main__ import lcomp, old_list").timeit()
print("Function\t\tSeconds elapsed")
print("For loop\t\t{}".format(results_floop))
print("List comp\t\t{}".format(results_lcomp))
记住:timeit 循环调用函数 100 万次并打印耗时(以秒为单位)。像这样阅读执行 100 万次,用了 xx 秒。
这是结果。我认为他们自己会说话。
~/python » python3 lists.py
Function Seconds elapsed
For loop 11.089475459069945
List comp 5.985794545034878
