学习资料来自于ring翻译的python cook book.源贴于linuxforum ,此处只是记录我自己的一点理解


通过多个list循环

a=[‘a1’,’a2’,’a3’]

b=[‘b1’,’b2’]

for x,y in
[(x,y) for x in a for y in b]:

    print x,y

更多的list也可以

For x,y,z in
[(x,y,z) for x in a for y in b for z in c]: #
以此类推

 

变换二维数组

行变列

arr=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]  #行列必须整齐

print
[[r[col] for r in arr] for col in range(len(arr[0]))]

 

 

建立非共享的多维数组

共享的多维数组

d=[[0]*3]*3

print d

[[0,0,0],[0,0,0],[0,0,0]]

d[0][0]=1

[[1,0,0],[1,0,0],[1,0,0]]

list包容建立非共享多维数组

d=[0 for col
in range(3) for row in range(3)]

 

给字典排序

1:

   def sortDict(adict):

       items=adict.items()

       items.sort()

       return [value for key,value in items]

2: speed up!

    def sortDict(adict):

       keys=adict.keys()

       keys.sort()

       return [adict[key] for key in keys]

3:speed up! Up!

     def sortDict(adict):

        keys=adict.keys()

        keys.sort()

        return map(adict.get,keys)

4:speeeeeed
up!   Ver>2.0

      Def sortDict(adict):

         keys=adict.keys()

         keys.sort()

         return map(adict.__getitem__,keys)

 

生成浮点数range

def frange(start,end=None,inc=1.0):
        if end == None:
               end = start + 0.0
               start = 0.0
        assert inc  
 
        
        i=0
        while 1:
               next = start + i*inc
               if inc>0 and next>=end:
                       break
               elif inc<0 and next <=end:
                       break
               yield next
               i+=1
 
 for i in frange(0,10,0.25):
     print i

 

# assert #断言一种检查的手段。当条件不满足时程序退出,并打印出出错的地方。多用于参数的合法性检查。



2条评论

  1. 字典排序的四种方法,

    python2.2: 1>2,2>3,3>4 4最快 2,3,4区别不大

    python2.3: 1>2,2>3,3<4 3最快,2,3,4区别不大

    python2.4: 1>2,2=3=4 2,3,4一样快

  2. 在2.3.4下做了一下测试(字典中100万条记录),确实如你所说。3最快

    至少在2.3.4下 __getitem__ 的效率不如 get



    [value for key,value in items] 和 [adict[key] for key in keys]之间的差别也不太大

    不过 items.sort() 同 keys.sort() 之间的差距可就非常大了(还不算内存上的差异)

    2.3.4 下

    1>2 > 3 3<4

    2同3之间的在最后赋值上的差距有 50%以上

发表评论

评论也有版权!