值得玩味兒的14個Python程式設計小技巧

風格----即:少廢話,直接Sublime裡面寫Python!
主要包含的內容:幾種常用資料型別list--->str---->dict--->set的基本轉換、常用的操作、文字預處理過程中的字串的處理以及利用正則剔除正文中的URL資訊等,都是自己寫程式碼時比較高頻的點兒!
懶得編輯格式了...有需求的人,隨便看看就當學習啦!
# coding:utf-8 # 1.實現浮點除法 from __future__ import division # 2.解決處理文字資料格式報錯 import sys reload(sys) sys.setdefaultencoding("utf-8") from collections import OrderedDict from collections import Counter # 3.python中集中資料型別的轉換:str--->list-->str--->list--->dict a="12345" a=list(a) print "-".join(list(a)) # 逆轉列表 a1=a[::-1] print a1 # ['5', '4', '3', '2', '1'] print zip(a,a1) # [('1', '5'), ('2', '4'), ('3', '3'), ('4', '2'), ('5', '1')] # list--->string aa=",".join(["#".join(i) for i in zip(a,a1)]) print aa #1#5,2#4,3#3,4#2,5#1 # 4.帶索引的訪問list的元素 for index,value in enumerate(a): print index,value # list--->dict,列表的推導式訪問+條件判斷+型別轉換 a_index={v:i for i,v in enumerate(a) if int(v)%2==0} print a_index # {'2': 1, '4': 3} teams = ["Packers", "49ers", "Ravens", "Patriots"] print {key: value for value, key in enumerate(teams)} # {'49ers': 1, 'Ravens': 2, 'Patriots': 3, 'Packers': 0} #5.單個變數str—>unicode編碼:u'%s' %(a) # collections是Python內建的一個集合模組,提供了許多有用的集合類。 # 6.實現list的去重 name=["kobe","tom","james","duke","kobe","tom"] # 使用set當時去重會改變原始的順序 print list(set(name)) # ['kobe', 'duke', 'james', 'tom'] # 推薦使用OrderedDict這種方式來保留原始list中的次序[在排序中有用],在遍歷的時候,他是保持了key插入字典的順序 print list(OrderedDict.fromkeys(name).keys()) # ['kobe', 'tom', 'james', 'duke'] # 7.統計詞頻,並返回Top K。[當需要處理的字典長度是固定的時候,也可以用於字典的排序] sort_all=Counter(name).most_common(5) print sort_all # [('kobe', 2), ('tom', 2), ('duke', 1), ('james', 1)] #8.使用defaultdict替換系統預設的建立字典,可以不需要我們在程式中,按key訪問的時候,先手動的判斷該key是否在字典中 from collections import defaultdict # 定義,當訪問一個key不存的時候的預設值 dd = defaultdict(lambda: 'None') for i in name: if i not in dd: dd[i] = 1 print dd["tom"] print dd["Tomes"] # 也可以使用預設的字典構建方式,然後再訪問時候使用get的方式 # 9.藉助deque在list中實現雙向的插入、刪除: from collections import deque q = deque(['a', 'b', 'c']) # 尾部插入 q.append('x') # 頭部插入 q.appendleft('y') print q # 當然,也可以藉助預設的list q=['a', 'b', 'c'] q.insert(0,'y') # 刪除指定位置的元素 a=q.pop(1) print q print a #10.返回陣列中的最大最小值 num=[12,1,200,4,43,21] def getIndex(l,flag="max"): if flag.strip()=="max": return max(range(len(l)),key=l.__getitem__) elif flag.strip()=="min": return min(range(len(l)),key=l.__getitem__) else: return "Flag Error" print getIndex(num) print getIndex(num,flag="min8") # 11.對列表中的各個元素進行類別轉換 num=map(str,num) print num num=map(float,num) print num # map結合lambda表示式還可以完成很多操作 m=[1,2,3,4] print map(lambda x:x+1,m) # 12.字典格式的字串---->字典[推薦使用ast的方式,而不是json(存在引號問題)/eval的方式(存在安全漏洞)] import ast user = '{"name" : "john", "gender" : "male", "age": 28}' print ast.literal_eval(user)["name"] # 13.對字典排序 d = {'a': 2, 'A': 1, 1: 3, 'b': 2} # 對你字典安裝value進行排序,然後返回一個元組的集合 import operator s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True) print s # [(1, 3), ('a', 2), ('b', 2), ('A', 1)] #14.字串的過濾。[文字的與處理中常用] """(1)判斷一個unicode是否只包含英文字母""" def is_alphabet(uchar): if (uchar >= u'\u0041' and uchar<=u'\u005a') or (uchar >= u'\u0061' and uchar<=u'\u007a'): return True else: return False # (2)藉助re,只保留字串中的中英文數字 import re s="我是中國人(Chinese)!666^_^!!" s=re.findall(u"[a-z]|[A-Z]|[\u4e00-\u9fa5]|[\\d]+",u'%s' %(s)) s= "".join(s).strip().replace(" ","") print s # 我是中國人Chinese666 # (3)去除文字中的URL def remove_urls (vTEXT): vTEXT = re.sub(r'(https|http|httpt)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b', ' ', vTEXT, flags=re.MULTILINE) return(vTEXT)
真爽...這樣寫部落格的速度就大大提高了....程式猿嘛,能上程式碼,就少絮叨啦!!!大家自己使用的過程中,有啥好的Python程式設計小技巧,歡迎交流啊!