前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >值得玩味儿的14个Python编程小技巧

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

作者头像
用户1332428
发布2018-11-22 17:03:53
4170
发布2018-11-22 17:03:53
举报
文章被收录于专栏:人工智能LeadAI人工智能LeadAI

全文共394个字,1张图,预计阅读时间5分钟。

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

主要包含的内容:几种常用数据类型list--->str---->dict--->set的基本转换、常用的操作、文本预处理过程中的字符串的处理以及利用正则剔除正文中的URL信息等,都是自己写代码时比较高频的点儿!

懒得编辑格式了...有需求的人,随便看看就当学习啦!

代码语言:javascript
复制
  1# coding:utf-8
  2# 1.实现浮点除法
  3from __future__ import division
  4# 2.解决处理文本数据格式报错
  5import sys
  6reload(sys)
  7sys.setdefaultencoding("utf-8")
  8from collections import OrderedDict
  9from collections import Counter
 10# 3.python中集中数据类型的转换:str--->list-->str--->list--->dict
 11a="12345"
 12a=list(a)
 13print "-".join(list(a))
 14# 逆转列表
 15a1=a[::-1]
 16print a1
 17# ['5', '4', '3', '2', '1']
 18print zip(a,a1)
 19# [('1', '5'), ('2', '4'), ('3', '3'), ('4', '2'), ('5', '1')]
 20# list--->string
 21aa=",".join(["#".join(i) for i in zip(a,a1)])
 22print aa
 23#1#5,2#4,3#3,4#2,5#1
 24
 25# 4.带索引的访问list的元素
 26for index,value in enumerate(a):
 27print index,value
 28# list--->dict,列表的推导式访问+条件判断+类型转换
 29a_index={v:i for i,v in enumerate(a) if int(v)%2==0}
 30print a_index
 31# {'2': 1, '4': 3}
 32teams = ["Packers", "49ers", "Ravens", "Patriots"]
 33print {key: value for value, key in enumerate(teams)}
 34# {'49ers': 1, 'Ravens': 2, 'Patriots': 3, 'Packers': 0}
 35
 36#5.单个变量str—>unicode编码:u'%s' %(a)
 37
 38# collections是Python内建的一个集合模块,提供了许多有用的集合类。
 39# 6.实现list的去重
 40name=["kobe","tom","james","du ke","kobe","tom"]
 41# 使用set当时去重会改变原始的顺序
 42print list(set(name))
 43# ['kobe', 'duke', 'james', 'tom']
 44
 45# 推荐使用OrderedDict这种方式来保留原始list中的次序[在排序中有用],在遍历的时候,他是保持了key插入字典的顺序
 46print list(OrderedDict.fromkeys(name).keys())
 47# ['kobe', 'tom', 'james', 'duke']
 48
 49# 7.统计词频,并返回Top K。[当需要处理的字典长度是固定的时候,也可以用于字典的排序]
 50sort_all=Counter(name).most_common(5)
 51print sort_all
 52# [('kobe', 2), ('tom', 2), ('duke', 1), ('james', 1)]
 53
 54#8.使用defaultdict替换系统默认的创建字典,可以不需要我们在程序中,按key访问的时候,先手动的判断该key是否在字典中
 55from collections import defaultdict
 56# 定义,当访问一个key不存的时候的默认值
 57dd = defaultdict(lambda: 'None')
 58for i in name:
 59if i not in dd:
 60dd[i] = 1
 61print dd["tom"]
 62print dd["Tomes"]
 63# 也可以使用默认的字典构建方式,然后再访问时候使用get的方式
 64
 65# 9.借助deque在list中实现双向的插入、删除:
 66from collections import deque
 67q = deque(['a', 'b', 'c'])
 68# 尾部插入
 69q.append('x')
 70# 头部插入
 71q.appendleft('y')
 72print q
 73# 当然,也可以借助默认的list
 74q=['a', 'b', 'c']
 75q.insert(0,'y')
 76# 删除指定位置的元素
 77a=q.pop(1)
 78print q
 79print a
 80
 81#10.返回数组中的最大最小值
 82num=[12,1,200,4,43,21]
 83
 84def getIndex(l,flag="max"):
 85if flag.strip()=="max":
 86return max(range(len(l)),key=l.__getitem__)
 87elif flag.strip()=="min":
 88return min(range(len(l)),key=l.__getitem__)
 89else:
 90return "Flag Error"
 91
 92print getIndex(num)
 93print getIndex(num,flag="min8")
 94
 95# 11.对列表中的各个元素进行类别转换
 96num=map(str,num)
 97print num
 98num=map(float,num)
 99print num
100# map结合lambda表达式还可以完成很多操作
101m=[1,2,3,4]
102print map(lambda x:x+1,m)
103
104# 12.字典格式的字符串---->字典[推荐使用ast的方式,而不是json(存在引号问题)/eval的方式(存在安全漏洞)]
105import ast
106user = '{"name" : "john", "gender" : "male", "age": 28}'
107print ast.literal_eval(user)["name"]
108
109# 13.对字典排序
110d = {'a': 2, 'A': 1, 1: 3, 'b': 2}
111# 对你字典安装value进行排序,然后返回一个元组的集合
112import operator
113s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
114print s
115# [(1, 3), ('a', 2), ('b', 2), ('A', 1)]
116
117#14.字符串的过滤。[文本的与处理中常用]
118"""(1)判断一个unicode是否只包含英文字母"""
119def is_alphabet(uchar):
120if (uchar >= u'\u0041' and uchar<=u'\u005a') or (uchar >= u'\u0061' and uchar<=u'\u007a'):
121return True
122else:
123return False
124
125# (2)借助re,只保留字符串中的中英文数字
126import re
127s="我是中国人(Chinese)!666^_^!!"
128s=re.findall(u"[a-z]|[A-Z]|[\u4e00-\u9fa5]|[\\d]+",u'%s' %(s))
129s= "".join(s).strip().replace(" ","")
130print s
131# 我是中国人Chinese666
132
133# (3)去除文本中的URL
134def remove_urls (vTEXT):
135vTEXT = re.sub(r'(https|http|httpt)?:\/\/(\w|\.|\/|\?|\=|\&|\%)*\b', ' ', vTEXT, flags=re.MULTILINE)
136return(vTEXT)

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能LeadAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档