值得玩味儿的14个Python编程小技巧


最近的工作中经常使用Python编写一些基本解决一些NLP的小问题,在自己的工作日记里面也记录了不少的python编程中常用的小"Trick",看到最近大家学习Python的劲头儿这么火辣,那就简单的贴出一些。该篇文章定位是"Just show me code"风格----即:少废话,直接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="min")

# 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)

#14.Python中Json格式数据的转换(字典<-->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"}]}
'''

真爽...这样写博客的速度就大大提高了....程序猿嘛,能上代码,就少絮叨啦!!!大家自己使用的过程中,有啥好的Python编程小技巧,欢迎交流啊!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容