有个需求,需要插入不重复的数,忽略重复的数。下面插入10000个数。
1.用集合

import bisect as bi
import time as tm
set_a=set()
sortlst_a=[]

def ins_set(n):
 for i in range(n,1,-2):
  set_a.add(i)
 return len(set_a)

2.用有序列表

def ins_lst(n):
 for i in range(n,1,-2):
  if bi.bisect_right(sortlst_a,i)==bi.bisect_left(sortlst_a,i):bi.insort(sortlst_a,i)
 return len(sortlst_a)

t=tm.time();set_a=set();print(ins_set(2*10**5),tm.time()-t)
t=tm.time();sortlst_a=[];print(ins_lst(2*10**5),tm.time()-t)

结果

>>> t=tm.time();set_a=set();print(ins_set(2*10**5),tm.time()-t)
100000 0.031199932098388672
>>> t=tm.time();sortlst_a=[];print(ins_lst(2*10**5),tm.time()-t)
100000 4.2900073528289795

差距有点大,不过,比起每次插入前,对列表sort然后append,bitsec还是算快的。

def ins_lst3(n):
 for i in range(n,1,-2):
  sortlst_a.sort()
  if bi.bisect_right(sortlst_a,i)==bi.bisect_left(sortlst_a,i):sortlst_a.append(i)
 return len(sortlst_a)

>>> t=tm.time();sortlst_a=[];print(ins_lst3(10**5),tm.time()-t)
50000 43.414876222610474