非常有用的Python技巧,


 函数连续调用

  1. def add(x):  
  2.     class AddNum(int):  
  3.         def __call__(self, x): 
  4.             return AddNum(self.numerator + x) 
  5.      return AddNum(x)  
  6. print add(2)(3)(5)  
  7. # 10  
  8. print add(2)(3)(4)(5)(6)(7)  
  9. # 27  
  10. # javascript 版  
  11. var add = function(x){  
  12.     var addNum = function(x){  
  13.         return add(addNum + x);  
  14.     };  
  15.     addNum.toString = function(){  
  16.         return x;  
  17.     }  
  18.     return addNum;  
  19. add(2)(3)(5)//10  
  20. add(2)(3)(4)(5)(6)(7)//27 

默认值陷阱

  1. >>> def evil(v=[]):  
  2. ...     v.append(1)  
  3. ...     print v 
  4. ...  
  5. >>> evil()  
  6. [1]  
  7. >>> evil()  
  8. [1, 1] 

读写csv文件

  1. import csv  
  2. with open('data.csv', 'rb') as f:  
  3.     reader = csv.reader(f)  
  4.     for row in reader: 
  5.          print row  
  6. # 向csv文件写入  
  7. import csv  
  8. with open( 'data.csv', 'wb') as f:  
  9.     writer = csv.writer(f)  
  10.     writer.writerow(['name', 'address', 'age'])  # 单行写入  
  11.     data = [  
  12.             ( 'xiaoming ','china','10'),  
  13.             ( 'Lily', 'USA', '12')]   
  14.     writer.writerows(data)  # 多行写入 

数制转换

  1. >>> int('1000', 2)  
  2. 8  
  3. >>> int('A', 16)  
  4. 10 

格式化 json

  1. echo'{"k": "v"}' | python-m json.tool 

list 扁平化

  1. list_ = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
  2. [k for i in list_ for k in i] #[1, 2, 3, 4, 5, 6, 7, 8, 9]  
  3. import numpy as np  
  4. print np.r_[[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
  5. import itertools  
  6. print list(itertools.chain(*[[1, 2, 3], [4, 5, 6], [7, 8, 9]]))  
  7. sum(list_, [])  
  8. flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]  
  9. flatten(list_) 

list 合并

  1. >>> a = [1, 3, 5, 7, 9]  
  2. >>> b = [2, 3, 4, 5, 6]  
  3. >>> c = [5, 6, 7, 8, 9]  
  4. >>> list(set().union(a, b, c))  
  5. [1, 2, 3, 4, 5, 6, 7, 8, 9] 

出现次数最多的 2 个字母

  1. from collections import Counter  
  2. c = Counter('hello world')  
  3. print(c.most_common(2)) #[('l', 3), ('o', 2)] 

谨慎使用

  1. eval("__import__('os').system('rm -rf /')", {}) 

置换矩阵

  1. matrix = [[1, 2, 3],[4, 5, 6]] 
  2. res = zip( *matrix )   # res = [(1, 4), (2, 5), (3, 6)] 

列表推导

  1. [item**2 for item in lst if item % 2]  
  2. map(lambda item: item ** 2, filter(lambda item: item % 2, lst))  
  3. >>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))  
  4. ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 

排列组合

  1. >>> for p in itertools.permutations([1, 2, 3, 4]):  
  2. ...     print ''.join(str(x) for x in p)  
  3. ...  
  4. 1234  
  5. 1243  
  6. 1324  
  7. 1342  
  8. 1423  
  9. 1432  
  10. 2134  
  11. 2143  
  12. 2314  
  13. 2341  
  14. 2413  
  15. 2431  
  16. 3124  
  17. 3142  
  18. 3214  
  19. 3241  
  20. 3412  
  21. 3421  
  22. 4123  
  23. 4132  
  24. 4213  
  25. 4231  
  26. 4312  
  27. 4321  
  28. >>> for c in itertools.combinations([1, 2, 3, 4, 5], 3):  
  29. ...     print ''.join(str(x) for x in c)  
  30. ...  
  31. 123  
  32. 124  
  33. 125  
  34. 134  
  35. 135  
  36. 145  
  37. 234  
  38. 235  
  39. 245  
  40. 345  
  41. >>> for c in itertools.combinations_with_replacement([1, 2, 3], 2):  
  42. ...     print ''.join(str(x) for x in c)  
  43. ...  
  44. 11  
  45. 12  
  46. 13  
  47. 22  
  48. 23  
  49. 33  
  50. >>> for p in itertools.product([1, 2, 3], [4, 5]):  
  51. (1, 4)  
  52. (1, 5)  
  53. (2, 4)  
  54. (2, 5)  
  55. (3, 4)  
  56. (3, 5) 

默认字典

  1. >>> m = dict()  
  2. >>> m['a']  
  3. Traceback (most recent call last):  
  4.   File "<stdin>", line 1, in <module>  
  5. KeyError: 'a'  
  6. >>>  
  7. >>> m = collections.defaultdict(int)  
  8. >>> m['a']  
  9. 0  
  10. >>> m['b']  
  11. 0  
  12. >>> m = collections.defaultdict(str)  
  13. >>> m['a']  
  14. ''  
  15. >>> m['b'] += 'a'  
  16. >>> m['b']  
  17. 'a'  
  18. >>> m = collections.defaultdict(lambda: '[default value]')  
  19. >>> m['a']  
  20. '[default value]'  
  21. >>> m['b']  
  22. '[default value]' 

反转字典

  1. >>> m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}  
  2. >>> m  
  3. {'d': 4, 'a': 1, 'b': 2, 'c': 3}  
  4. >>> {v: k for k, v in m.items()}  
  5. {1: 'a', 2: 'b', 3: 'c', 4: 'd'}  

评论关闭