循环代码优化
遵循原则
- 减少内部循环
- 减少内部循环计算量,可以尽可能向外提
- 使用局部变量,查询较快
import time
#时间0.23
start = time.time()
for i in range (1000):
result = []
for j in range(1000):
result.append(i*1000 + j*1000)
end = time.time()
print("耗时:{0}".format((end-start)))
#内部循环外提,时间0.16
start1 = time.time()
for i in range (1000):
result = []
k = i*1000
for j in range(1000):
result.append(k + j*1000)
end1 = time.time()
print("耗时:{0}".format((end1-start1 )))
其他优化
- 连接多个字符串,使用 join()而不使用+
- 列表进行元素插入和删除,尽量在列表尾部操作
ZIP()多个序列同时遍历
names = ("sxl","sxl1","sxl2","sxl3")
ages = (18,16,20,)
jobs = ("j1","j2","j3")
for name,age,job in zip(names,ages,jobs):
print("{0}--{1}--{2}".format(name,age,job))
推导式
#列表推导式
>>> [x*2 for x in range(1,10) if x%2==0]
[4, 8, 12, 16]
#集合推导式
>>> {x for x in range(1,10) if x%2!=0}
{1, 3, 5, 7, 9}
#字典推导式
#{key_expression : value_expression for 表达式 in 可迭代对象
>>> text = 'I am apple'
>>> char_count = {a:text.count(a) for a in text}
>>> char_count
{'I': 1, ' ': 2, 'a': 2, 'm': 1, 'p': 2, 'l': 1, 'e': 1}
#生成器推导式(生成元组)
>>> a = (x for x in range(1,10) if x%2!=0)
>>> tuple(a)
(1, 3, 5, 7, 9)
>>> a #该生成器只能运行一次
<generator object <genexpr> at 0x00000261FE039CC8>