转载:python list和set的性能比较+两者转换

两者性能比较(转自http://www.linuxidc.com/Linux/2012-07/66404.htm

本来是知道在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没有排序)。此种方法不仅方便且效率较高。

时间: 2024-11-09 04:31:35

转载:python list和set的性能比较+两者转换的相关文章

[python]用profile协助程序性能优化

转自:http://blog.csdn.net/gzlaiyonghao/article/details/1483728 本文最初发表于恋花蝶的博客http://blog.csdn.net/lanphaday,欢迎转载,但请务必保留原文完整,并保留本声明. [python]用profile协助程序性能优化 上帝说:“选择了脚本,就不要考虑性能.”我是很支持这句话的,使用脚本要的就是开发速度.良好的扩展性以及可维护性.可惜到了最后,我们的程序难免会运行得太慢,我们的客户不能忍受,这时候,我们就不得

4. Python里面如何实现tuple和list的转换

# Python里面如何实现tuple和list的转换 li = [1,2,3,4] print(tuple(li)) li1 = (1,2,3,4) print(list(li1)) str = '123' print(list(str))

python学习第二天:数字与字符串转换及逻辑值

1.数字与字符串的转化 #1.数字转字符,使用格式化字符串: *1.demo = ‘%d’  %  source *2.%d整型:%f 浮点型 :%e科学计数  *3.int('source') #转化为int型 #2.字符串转化为数字 *1.导入string :import string *2.demo = atoi(source)  #转换为整型’ atof()    #转为浮点型 2.逻辑值: and  #与 or  #或 not #非 python学习第二天:数字与字符串转换及逻辑值

python中文和unicode字符串之间的互相转换

首先:中文->unicode字符串 import chardet import codecs >>> a = "我是一个中国人">>> a'\xce\xd2\xca\xc7\xd2\xbb\xb8\xf6\xd6\xd0\xb9\xfa\xc8\xcb' >>> chardet.detect(a){'confidence': 0.99, 'encoding': 'GB2312'}>>> b = a.decod

[转载] python的内存管理机制

本文为转载,原作为http://www.cnblogs.com/CBDoctor/p/3781078.html,请大家支持原作者 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时确定的.这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结

python的日志logging模块性能以及多进程

写在前面: 日志是记录操作的一种好方式.但是日志,基本都是基于文件的,也就是要写到磁盘上的.这时候,磁盘将会成为一个性能瓶颈.对于普通的服务器硬盘(机械磁盘,非固态硬盘),python日志的性能瓶颈是多少呢?今天我们就来测一下. 测试代码如下: #! /usr/bin/env python#coding=utf-8 # ============================# Describe : 给平台提供的日志# D&P Author By: 常成功# Create Date: 2016/

[转载]Python 元组、列表、字典、文件

python的元组.列表.字典数据类型是很python(there python is a adjective)的数据结构.这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益处. 元组         个人认为就像java的数组,python中的元组有以下特性: 任意对象的有序集合,这条没啥说的,数组的同性: 通过偏移读取: 一旦生成,不可改变: 固定长度,支持嵌套 来例子吧: python 代码 >>> (0, 'haha', (4j, 'y')) (0, '

转载-Python学习笔记之文件读写

Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题:其他文件的读写及编码相关详见专题的博文. open()   close()     with open(...) as ... 看以下示例就能了解 Python 的 open() 及 close() 函数.这边调用 read()方法可以一次读取文件的全部内容,Python把

[转载]Python注册表信息丢失的解决方案

今天安装Python的模块时,安装失败,提示信息:Python version 2.7 required, which was not found in the registry. 原因在于Python在注册表中没有注册信息,需要手动添加: 1 # 2 # script to register Python 2.0 or later for use with win32all 3 # and other extensions that require Python registry settin