我正在基于一个不等于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

基本上maplist comprehension快,而for looptimeit快。

网络上有很多关于该主题的文献。

编辑:

我承诺会进行更新,以提供实际,切实的结果。这是代码。

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))


切记:循环调用函数一百万次,并打印以秒为单位的经过时间。读取它要执行一百万次,花了xx秒。

这是结果。我认为他们自己说话。

~/python » python3 lists.py
Function        Seconds elapsed
For loop        11.089475459069945
List comp       5.985794545034878

08-07 16:28