以下代码:
1.
from random import randrange
L=[ randrange(1000) for i in range(1000)]
print( 50 in L)
>>False
S=set(L)
print(50 in L)
>>False
用LIST来操作运行时间是平方级别的,而set操作是线性级时间。
2.
s=''
for add1 in String_producer():
s+=add1
以上代码在一定规模之前工作的很好,但是 超过一定范围之后,就是平方级别的增长了。解决方案如下:
adds1=[]
for add1 in string_producer():
adds1.append(add1)
s=''.join(adds1)
append操作允许我们将原有空间加上一定的百分比来进行‘过度’分配,其可用空间的增长方式是指数级别的,这时,
append 操作的成本在交由所有操作平均承担的情况下就变成了常数级别的操作
还有隐藏的更加深的
s =sum ( string_producer(),'')
这时回报错;
如果改用list,
list=[ [1,2],[ 3,4,5] ,[6]]
print (sum(list,[]))
>>[1,2,3,,4,5,6]
以上代码运行没问题,但是这和上面的字符串+=那个例子一样,都是平方级别的运行时间。解决方案:
res=[]
for lst i lists:
res.extend(lst)
只要测试以下两个版本的 时间,就会发现list的长度很短时,他们之间就没有什么区别,但是一旦超过某个长度,前面的sum版本就会彻底失败。