Python性能优化的小细节

下面是 Python 性能快速优化的第二部分。

  1. 使用 Map ,Reduce 和 Filter 代替 for 循环
  2. 校验 a in b, 字典 或 set 比 列表 或 元组 更好
  3. 当数据量大的时候,尽可能使用不可变数据类型,他们更快 元组 > 列表
  4. 在一个列表中插入数据的复杂度为 O(n)
  5. 如果你需要操作列表的两端,使用 deque
  6. del – 删除对象使用如下 1) python 自己处理它,但确保使用了 gc 模块 2) 编写 __del__ 函数 3) 最简单的方式,使用后调用 del
一.查找的时候,特别是对大文件(大数据)进行查找的时候,用dictionary替代list
#-*-coding:utf-8-*-
from time import time
t = time()
list = ['a','b','is','python','jason','hello','hill','with','phone','test',
'dfdf','apple','pddf','ind','basic','none','baecr','var','bana','dd','wrd']
list = dict.fromkeys(list,True)
print list
filter = []
for i in range (1000000):
    for find in ['is','hat','new','list','old','.']:
        if find not in list:
            filter.append(find)
print "total run time:"
print time()-t


#2.53629994392
#1.38068699837
'''
Python 字典中使用了hash table,因此查找操作的复杂度为 O(1),而 list 实际是个数组,在 list 中,查找需要遍历整个 list,其复杂度为 O(n),
因此对成员的查找访问等操作字典要比 list 更快。
'''

二.涉及到list的交集或者求差等操作的时候,用set替代list
''
from time import time
t = time()
lista=[1,2,3,4,5,6,7,8,9,13,34,53,42,44]
listb=[2,4,6,9,23]
intersection=[]
for i in range (1000000):
    list(set(lista)&set(listb))
print "total run time:"
print time()-t

from time import time
'''
t = time()
lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 34, 53, 42, 44]
listb = [2, 4, 6, 9, 23]
intersection = []
for i in range(1000000):
    for a in lista:
        for b in listb:
            if a == b:
                intersection.append(a)

print "total run time:"
print time() - t

用时比较如下所示:
#6.26855993271
#1.63295388222

 
 
语法操作说明
set(list1) | set(list2)union包含 list1 和 list2 所有数据的新集合
set(list1) & set(list2)intersection包含 list1 和 list2 中共同元素的新集合
set(list1) - set(list2)difference在 list1 中出现但不在 list2 中出现的元素的集合
 
 
 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值