学Python途中可能会遗漏的一些关键点

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

import time

arr = ['apple', 'samsung', 'huawei', 'python', 'java', 'c', 'C++', 'C#', 'php', 'ruby',\
 'go','asp', 'html', 'huashuo', 'lianxiang', 'deer', 'jpg', 'pdf', 'txt', 'png', 'exe']
 
# arr = dict.fromkeys(arr, True)

t = time.time()      # 程序开始的时间
filet = []
for i in range(1000000):
    for i in ['apple', 'pdf', 'lianxiang', 'java', 'samsung']:
        if i in arr:           # 没有去掉前一句注释的时候,这里的arr使用的是列表那个结构,如果去掉注释,那么它是转换为字典类型使用的
            filet.append(i)
end = time.time() - t  	# 程序结束的时间

filet = set(filet)
print(end)
print(filet)

上述代码运行大概需要 5.7s左右的时间。如果去掉行 # arr = dict.fromkeys(arr, True)的注释,将 list 转换为字典之后再运行,时间大约为 3.7s,效率提高了一小半。因此在需要多数据成员进行频繁的查找或者访问的时候,使用 dict 而不是 list 是一个较好的选择。

set 常见用法

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

对循环的优化
对循环的优化所遵循的原则是尽量减少循环过程中的计算量,有多重循环的尽量将内层的计算提到上一层。 下面通过实例来对比循环优化后所带来的性能的提高。如果不进行循环优化,其大概的运行时间约为 132.375。

循环优化前

from time import time 
t = time() 
lista = [1,2,3,4,5,6,7,8,9,10] 
listb =[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01] 
for i in range (1000000): 
    for a in range(len(lista)): 
        for b in range(len(listb)): 
            x=lista[a]+listb[b] 
print("total run time:")
print(time()-t)

现在进行如下优化,将长度计算提到循环外,将第三层的计算 lista[a] 提到循环的第二层。

循环优化后

from time import time 
t = time() 
lista = [1,2,3,4,5,6,7,8,9,10] 
listb =[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.01] 
len1=len(lista) 
len2=len(listb) 
for i in range (1000000): 
    for a in range(len1): 
        temp=lista[a] 
        for b in range(len2): 
            x=temp+listb[b] 
print(time()-t)

上述优化后的程序其运行时间缩短为 102.171999931。优化前的 lista[a] 被计算的次数为 10000001010,而在优化后的代码中被计算的次数为1000000*10,计算次数大幅度缩短,因此性能有所提升。

ASCII码转换

ord('a')			//97,用于ASCII码将字符型转为数字型
chr(97)			//a,  用于ASCII码将数字型转为字符型

猜你喜欢

转载自blog.csdn.net/li8561191/article/details/84306794