( 1 ) 如何将高维数据降维
只需要一行代码就可以将树状结构的数据平扁化
from collections import Iterable
def flat (s) :return reduce(lambda x,y:x+flat(y) if isinstance(y,Iterable) else x+[y],s,[])
print(flat([(1 ,2 ,3 ),[2 ,3 ],5 ,[1 ,[2 ,3 ,{4 ,5 ,(6 )}]]]))
( 2 ) 关于循环
可以注意到,将小的循环放在外面是能够提升不少效率的,原因其实很简单:因为循环之间的跳转也是需要代价的,对于t3,最里面的语句x=i+j到内循环的跳转的次数是500000*5,而内循环与外循环之间的跳转是5次。对于t4,x=i+j的跳转次数是一样的,但是内循环与外循环之间的跳转的500000次,这里就是多出来的开销了。
def t3 () :
for i in range(5 ):
for j in range(5000000 ):
x =i+j
def t4 () :
for i in range(5000000 ):
for j in range(5 ):
x =i+j
( 3 ) 关于拼接数组
t1代码的执行时间远远大于t2,这是因为它执行的拼接操作更多,尽管t1中内部的一个list元素要少于t2,但是这个影响相对来说要小一些。
def t1 () :
L1 = [[(1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 )]*8 for i in range(5040 )]
flat_map(lambda x:x,L1)
def t2 () :
L2 = [[(1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 )]*5040 for i in range(8 )]
flat_map(lambda x:x,L2)
( 4 ) 关于同时迭代几个列表:python3直接使用zip返回一个iterator.下面的代码用来将一个’1111.0011.1010.1101’转换成十六进制的’0x….0x….0x…..0x….的形式’
def trans (s) :
return reduce(lambda x,y:x+y,map(lambda x:hex(int(x[0 ],2 )<<x[1 ]),zip(s.split('.' ),[16 ,8 ,4 ,0 ])))
( 5 ) 关于python的逻辑表达式短路技巧:
#method 1:
x = f()
res = x if x==[] else 100
#method 2:
res = f() or 100
#more:
b = ([] and 3 ) or 2 #b = 2
b = ([] and 3 ) and 2 #b = []
python里面的这个技巧可以让代码更加精炼!但是也会减少刻读性,自己斟酌~~~~