
最近的工作中經(jīng)常使用Python編寫(xiě)一些基本解決一些NLP的小問(wèn)題,在自己的工作日記里面也記錄了不少的python編程中常用的小"Trick",看到最近大家學(xué)習(xí)Python的勁頭兒這么火辣,那就簡(jiǎn)單的貼出一些。該篇文章定位是"Just show me code"風(fēng)格----即:少?gòu)U話,直接Sublime里面寫(xiě)Python!
主要包含的內(nèi)容:幾種常用數(shù)據(jù)類(lèi)型list--->str---->dict--->set的基本轉(zhuǎn)換、常用的操作、文本預(yù)處理過(guò)程中的字符串的處理以及利用正則剔除正文中的URL信息等,都是自己寫(xiě)代碼時(shí)比較高頻的點(diǎn)兒!
懶得編輯格式了...有需求的人,隨便看看就當(dāng)學(xué)習(xí)啦!
# coding:utf-8
# 1.實(shí)現(xiàn)浮點(diǎn)除法
from __future__ import division
# 2.解決處理文本數(shù)據(jù)格式報(bào)錯(cuò)
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from collections import OrderedDict
from collections import Counter
# 3.python中集中數(shù)據(jù)類(lèi)型的轉(zhuǎn)換:str--->list-->str--->list--->dict
a="12345"
a=list(a)
print "-".join(list(a))
# 逆轉(zhuǎn)列表
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.帶索引的訪問(wèn)list的元素
for index,value in enumerate(a):
print index,value
# list--->dict,列表的推導(dǎo)式訪問(wèn)+條件判斷+類(lèi)型轉(zhuǎn)換
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.單個(gè)變量str—>unicode編碼:u'%s' %(a)
# collections是Python內(nèi)建的一個(gè)集合模塊,提供了許多有用的集合類(lèi)。
# 6.實(shí)現(xiàn)list的去重
name=["kobe","tom","james","duke","kobe","tom"]
# 使用set當(dāng)時(shí)去重會(huì)改變?cè)嫉捻樞?print list(set(name))
# ['kobe', 'duke', 'james', 'tom']
# 推薦使用OrderedDict這種方式來(lái)保留原始list中的次序[在排序中有用],在遍歷的時(shí)候,他是保持了key插入字典的順序
print list(OrderedDict.fromkeys(name).keys())
# ['kobe', 'tom', 'james', 'duke']
# 7.統(tǒng)計(jì)詞頻,并返回Top K。[當(dāng)需要處理的字典長(zhǎng)度是固定的時(shí)候,也可以用于字典的排序]
sort_all=Counter(name).most_common(5)
print sort_all
# [('kobe', 2), ('tom', 2), ('duke', 1), ('james', 1)]
#8.使用defaultdict替換系統(tǒng)默認(rèn)的創(chuàng)建字典,可以不需要我們?cè)诔绦蛑?,按key訪問(wèn)的時(shí)候,先手動(dòng)的判斷該key是否在字典中
from collections import defaultdict
# 定義,當(dāng)訪問(wèn)一個(gè)key不存的時(shí)候的默認(rèn)值
dd = defaultdict(lambda: 'None')
for i in name:
if i not in dd:
dd[i] = 1
print dd["tom"]
print dd["Tomes"]
# 也可以使用默認(rèn)的字典構(gòu)建方式,然后再訪問(wèn)時(shí)候使用get的方式
# 9.借助deque在list中實(shí)現(xiàn)雙向的插入、刪除:
from collections import deque
q = deque(['a', 'b', 'c'])
# 尾部插入
q.append('x')
# 頭部插入
q.appendleft('y')
print q
# 當(dāng)然,也可以借助默認(rèn)的list
q=['a', 'b', 'c']
q.insert(0,'y')
# 刪除指定位置的元素
a=q.pop(1)
print q
print a
#10.返回?cái)?shù)組中的最大最小值
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="min")
# 11.對(duì)列表中的各個(gè)元素進(jìn)行類(lèi)別轉(zhuǎn)換
num=map(str,num)
print num
num=map(float,num)
print num
# map結(jié)合lambda表達(dá)式還可以完成很多操作
m=[1,2,3,4]
print map(lambda x:x+1,m)
# 12.字典格式的字符串---->字典[推薦使用ast的方式,而不是json(存在引號(hào)問(wèn)題)/eval的方式(存在安全漏洞)]
import ast
user = '{"name" : "john", "gender" : "male", "age": 28}'
print ast.literal_eval(user)["name"]
# 13.對(duì)字典排序
d = {'a': 2, 'A': 1, 1: 3, 'b': 2}
# 對(duì)你字典安裝value進(jìn)行排序,然后返回一個(gè)元組的集合
import operator
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
print s
# [(1, 3), ('a', 2), ('b', 2), ('A', 1)]
#14.字符串的過(guò)濾。[文本的與處理中常用]
"""(1)判斷一個(gè)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,只保留字符串中的中英文數(shù)字
import re
s="我是中國(guó)人(Chinese)!666^_^!!"
s=re.findall(u"[a-z]|[A-Z]|[\u4e00-\u9fa5]|[\\d]+",u'%s' %(s))
s= "".join(s).strip().replace(" ","")
print s
# 我是中國(guó)人Chinese666
# (3)去除文本中的URL
def remove_urls (vTEXT):
vTEXT = re.sub(r'(https|http|httpt)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b', ' ', vTEXT, flags=re.MULTILINE)
return(vTEXT)
#14.Python中Json格式數(shù)據(jù)的轉(zhuǎn)換(字典<-->jsonArray形式的字符串)
import json
a="""{
"num": 10,
"data": [
{
"content": "\u3010\u6295\u7a3f\u3011\u6253\u6270\u4e86\uff0c\u8fd9\u91cc\u662f\u6b66\u6c49\u4e0a\u5b66\u7684\u5927\u4e8c\u7f8e\u672f\u751f\uff0c\u8bfb\u7684\u662f\u4e00\u4e2a\u4e0d\u77e5\u540d\u7684\u4e8c\u672c\u5b66\u6821\uff0c\u82f1\u8bed\u5f88\u5dee\uff0c\u6240\u4ee5\u60f3\u95ee\u95ee\u5404\u4f4d\u5728\u6b66\u6c49\u7684jk\u54ea\u4e2a\u5730\u65b9\u7684\u82f1\u8bed\u57f9\u8bad\u673a\u6784\u6bd4\u8f83\u597d\uff08\u6211\u662f\u771f\u7684\u57fa\u7840\u5f88\u5dee\uff09\u6216\u8005\u8bf4\u4e0d\u5728\u6b66\u6c49\u7684jk\u5c0f\u59d0\u59d0\u4eec\u8981\u662f\u77e5\u9053\u7684\u8bdd\u5e0c\u671b\u4f60\u4eec\u53ef\u4ee5\u63a8\u8350\u4e00\u4e0b\u7f51\u8bfe\uff0c\u8c22\u8c22\u5404\u4f4d\uff01\u8c22\u8c22\u6d1e\u5a18\uff01 \u200b",
"type": "text_embedding",
"mid": "4314150874797813"
},
{
"content": "\u6211\u53d1\u8868\u4e86\u5934\u6761\u6587\u7ae0:\u300a\u7f51\u53cb\u6652\u9a6c\u84c9\u53d7\u4f24\u7ec6\u8282\u7167\uff0c\u4e0e\u4e4b\u524d\u51fa\u5165\u5f88\u5927\u300b http://t.cn/EyjhJIC \u200b",
"type": "text_embedding",
"mid": "4314665644994791"
}
]
}"""
# jsonArray字符串---->字典
a_dict = json.loads(a)
print a_dict
'''
{u'num': 10, u'data': [{u'content': u'\u3010\u6295\u7a3f\u3011\u6253\u6270\u4e86\uff0c\u8fd9\u91cc\u662f\u6b66\u6c49\u4e0a\u5b66\u7684\u5927\u4e8c\u7f8e\u672f\u751f\uff0c\u8bfb\u7684\u662f\u4e00\u4e2a\u4e0d\u77e5\u540d\u7684\u4e8c\u672c\u5b66\u6821\uff0c\u82f1\u8bed\u5f88\u5dee\uff0c\u6240\u4ee5\u60f3\u95ee\u95ee\u5404\u4f4d\u5728\u6b66\u6c49\u7684jk\u54ea\u4e2a\u5730\u65b9\u7684\u82f1\u8bed\u57f9\u8bad\u673a\u6784\u6bd4\u8f83\u597d\uff08\u6211\u662f\u771f\u7684\u57fa\u7840\u5f88\u5dee\uff09\u6216\u8005\u8bf4\u4e0d\u5728\u6b66\u6c49\u7684jk\u5c0f\u59d0\u59d0\u4eec\u8981\u662f\u77e5\u9053\u7684\u8bdd\u5e0c\u671b\u4f60\u4eec\u53ef\u4ee5\u63a8\u8350\u4e00\u4e0b\u7f51\u8bfe\uff0c\u8c22\u8c22\u5404\u4f4d\uff01\u8c22\u8c22\u6d1e\u5a18\uff01 \u200b', u'type': u'text_embedding', u'mid': u'4314150874797813'}, {u'content': u'\u6211\u53d1\u8868\u4e86\u5934\u6761\u6587\u7ae0:\u300a\u7f51\u53cb\u6652\u9a6c\u84c9\u53d7\u4f24\u7ec6\u8282\u7167\uff0c\u4e0e\u4e4b\u524d\u51fa\u5165\u5f88\u5927\u300b http://t.cn/EyjhJIC \u200b', u'type': u'text_embedding', u'mid': u'4314665644994791'}]}
'''
print a_dict["num"]
# python的字典---->Python字符串
a_string = json.dumps(a_dict)
print a_string
'''
{"num": 10, "data": [{"content": "\u3010\u6295\u7a3f\u3011\u6253\u6270\u4e86\uff0c\u8fd9\u91cc\u662f\u6b66\u6c49\u4e0a\u5b66\u7684\u5927\u4e8c\u7f8e\u672f\u751f\uff0c\u8bfb\u7684\u662f\u4e00\u4e2a\u4e0d\u77e5\u540d\u7684\u4e8c\u672c\u5b66\u6821\uff0c\u82f1\u8bed\u5f88\u5dee\uff0c\u6240\u4ee5\u60f3\u95ee\u95ee\u5404\u4f4d\u5728\u6b66\u6c49\u7684jk\u54ea\u4e2a\u5730\u65b9\u7684\u82f1\u8bed\u57f9\u8bad\u673a\u6784\u6bd4\u8f83\u597d\uff08\u6211\u662f\u771f\u7684\u57fa\u7840\u5f88\u5dee\uff09\u6216\u8005\u8bf4\u4e0d\u5728\u6b66\u6c49\u7684jk\u5c0f\u59d0\u59d0\u4eec\u8981\u662f\u77e5\u9053\u7684\u8bdd\u5e0c\u671b\u4f60\u4eec\u53ef\u4ee5\u63a8\u8350\u4e00\u4e0b\u7f51\u8bfe\uff0c\u8c22\u8c22\u5404\u4f4d\uff01\u8c22\u8c22\u6d1e\u5a18\uff01 \u200b", "type": "text_embedding", "mid": "4314150874797813"}, {"content": "\u6211\u53d1\u8868\u4e86\u5934\u6761\u6587\u7ae0:\u300a\u7f51\u53cb\u6652\u9a6c\u84c9\u53d7\u4f24\u7ec6\u8282\u7167\uff0c\u4e0e\u4e4b\u524d\u51fa\u5165\u5f88\u5927\u300b http://t.cn/EyjhJIC \u200b", "type": "text_embedding", "mid": "4314665644994791"}]}
'''
真爽...這樣寫(xiě)博客的速度就大大提高了....程序猿嘛,能上代碼,就少絮叨啦?。?!大家自己使用的過(guò)程中,有啥好的Python編程小技巧,歡迎交流啊!