zoukankan      html  css  js  c++  java
  • Python的Set和List的性能比较 + 两者之间的转换

    在Twitter上看到日本友人@IanMLewis的一条推,测试了下python中Set和List的性能差距,真是不测不知道一测吓一跳,差距能有数百倍 –!

    他的原文地址在这里:Pythonのセットがすごい。翻译成中文如下:

    本来是知道在Python中使用Set是比较高效,但是没想到竟然有这么大的差距:

    ~$ python -m timeit -n 1000 "[x for x in range(1000) if x in range(500, 1500)]"

    1000 loops, best of 3: 28.2 msec per loop

    ~$ python -m timeit -n 1000 "set(range(1000)).intersection(range(500, 1500))"

    1000 loops, best of 3: 120 usec per loop

    List 大概用了Set的225倍的时间。List转Set基本用不了什么时间,所以如果有需要求(集合,列表等)的并集和交集的时候,最好使用Set。

    【更新】

    考虑到range(500, 1500) 调用了1000次(会比较耗时),改成只调用一次的话,时间从28.2msec降到了18.2msec。仍然要(比Set)慢大概150倍。

    ~$  python -m timeit -n 1000 "range1500=range(500, 1500);[x for x in range(1000) if x in range1500]"

    ---------------------------------------------------------------------------------------
    set转成list方法如下:                                                     list转成set方法如下:
    s = set('12342212')                                                       l = ['12342212']
    print s    # set(['1', '3', '2', '4'])                                       s = set(l[0])
    l = list(s)                                                                         print s    # set(['1', '3', '2', '4'])
    l.sort()    # 排序                                                             m = ['11','22','33','44','11','22']
    print l    # ['1', '2', '3', '4']                                               print set(m)    # set(['11', '33', '44', '22'])

    可见set和lsit可以自由转换,在删除list中多个/海量重复元素时,可以先转换成set,然后再转回list并排序(set没有排序)。此种方法不仅方便且效率较高


    作者:呆头龙
    出处:http://www.cnblogs.com/waniu/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    该文章也同时发布在我的独立博客中-呆头龙
    欢迎园友讨论下自己的见解,及推荐更好资料。
    本文如对读者有帮助,还请多帮 下此文。
    谢谢!!! 

  • 相关阅读:
    【Elasticsearch 技术分享】—— ES 常用名词及结构
    【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?
    除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?
    小伙伴想写个 IDEA 插件么?这些 API 了解一下!
    部署Microsoft.ReportViewe
    关于TFS强制undo他人check out
    几段查看数据库表占用硬盘空间的tsql
    How to perform validation on sumbit only
    TFS 2012 Disable Multiple Check-out
    在Chrome Console中加载jQuery
  • 原文地址:https://www.cnblogs.com/waniu/p/2981444.html
Copyright © 2011-2022 走看看