首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种方法对Python迭代更快?

哪种方法对Python迭代更快?
EN

Stack Overflow用户
提问于 2014-12-30 18:59:25
回答 2查看 97关注 0票数 1

我从一个大的旧列表中创建一个新的列表,其基础是一个不等于零的值。哪种迭代方法更快?

备选案文1:

代码语言:javascript
复制
new_list = []
for values in old_list:
   if values[4] is not None:
       new_list.append(values[4])

备选案文2:

代码语言:javascript
复制
new_list = [x for x in old_list if x[4] is not None]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 19:01:21

试着同时使用timeit

但第二是广泛使用的以速度快而闻名

基本上,maplist comprehension快,比for loop快。

关于这个主题,网络上有很多关于的文献

编辑:

承诺了一次更新,并取得了实际的、切实的结果。这是密码。

代码语言:javascript
复制
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秒。

以下是结果。我想他们是自己说话的。

代码语言:javascript
复制
~/python » python3 lists.py
Function        Seconds elapsed
For loop        11.089475459069945
List comp       5.985794545034878
票数 5
EN

Stack Overflow用户

发布于 2014-12-30 19:20:39

第二个版本速度更快,可读性更强。如果您需要更快的速度,并且只迭代结果一次,则可以使用filter - new_list = filter(lambda x: x[4] is not None, old_list)。您可以对筛选的结果调用list,但这可能没有列表理解的任何速度优势(而且比Pythonic IMHO更少)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27711009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档