值得玩味儿的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="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编程小技巧,欢迎交流啊!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

2018.2最新-Scrapy+elasticSearch+Django打造搜索引擎直至部署上线(三)爬虫基础知识

最终项目上线演示地址: http://search.mtianyan.cn 第三节:本节我们先得了解点你做爬虫做搜索引擎的居家必备知识基础。 Github地址:...

3304
来自专栏菩提树下的杨过

python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

2784
来自专栏Golang语言社区

go语言十大排序算法总结

选择排序 选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的...

3247
来自专栏JAVA高级架构

Java面试2018常考题目汇总(一)

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统...

34210
来自专栏测试开发架构之路

C语言之预处理命令与用typedef命名已有类型

 预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行...

4129
来自专栏好好学java的技术栈

Java面试2018常考题目汇总

Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等...

1123
来自专栏python学习路

数据结构与算法(一)

算法的概念 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据...

4225
来自专栏西枫里博客

Python学习笔记二(变量和字符串)

2017年年终确定的从2018年开始学习一门新的语言。随着机器学习人工智能的日渐深入,是时候有必要掌握以下Python了。博客今天更新第二篇学习记录,关于Pyt...

992
来自专栏十月梦想

构建函数(class)创建对象,对象属性新增和修改

构建函数创建对象类似函数,内部的属性方法用分号分离,json创建的对象各类属性方法用逗号可开

582
来自专栏灯塔大数据

技术 | Python从零开始系列连载(四)

导读 上一期学习了Python的基本运算和表达式的一部分,相信大家都已经熟悉啦,我们这一期就来学习Python的基本运算和表达式剩下的部分吧! Python的基...

4216

扫码关注云+社区