2016年4月17日 星期日

Python map 大驚奇

  1. a = [1] * 4
  2. b = [1,2] * 2
  3.  
  4. def original_diff(l1, l2):
  5. diff = 0
  6. for i in range(len(l1)):
  7. if l1[i] != l2[i]:
  8. diff += 1
  9. return diff
  10.  
  11. def lambda_diff(l1, l2):
  12. return list(map(lambda x: x[0] == x[1], zip(l1, l2))).count(False)
目的是要算出兩個整數list相差的元素個數,原本是用for loop一個個算,後來手癢又寫了一個lambda版本,以為會比較快,但
  1. ncalls tottime percall cumtime percall filename:lineno(function)
  2. 1 0.000 0.000 0.373 0.373 :1()
  3. 100000 0.093 0.000 0.093 0.000 temp.py:19(original_diff)
  4. 100000 0.173 0.000 0.234 0.000 temp.py:26(lambda_diff)
  5. 400000 0.052 0.000 0.052 0.000 temp.py:27()
用原本的方法快了一倍 囧

另外就是map(function, itre)做出來的是map object,必須再用list()把他轉成list,StackoverFlow上一樣的問題