给Python初学者的一些编程技巧


Posted in Python onApril 03, 2015
交换变量
 
x = 6
y = 5
 
x, y = y, x
 
print x
>>> 5
print y
>>> 6

if 语句在行内
 

print "Hello" if True else "World"
>>> Hello

连接

下面的最后一种方式在绑定两个不同类型的对象时显得很cool。

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
print nfc + afc
>>> ['Packers', '49ers', 'Ravens', 'Patriots']
 
print str(1) + " world"
>>> 1 world
 
print `1` + " world"
>>> 1 world
 
print 1, "world"
>>> 1 world
print nfc, 1
>>> ['Packers', '49ers'] 1

数字技巧
 

#除后向下取整
print 5.0//2
>>> 2
# 2的5次方
print 2**5
>> 32

注意浮点数的除法
 

print .3/.1
>>> 2.9999999999999996
print .3//.1
>>> 2.0

数值比较

这是我见过诸多语言中很少有的如此棒的简便法
 

x = 2
if 3 > x > 1:
 print x
>>> 2
if 1 < x > 0:
 print x
>>> 2

同时迭代两个列表
 

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for teama, teamb in zip(nfc, afc):
  print teama + " vs. " + teamb
>>> Packers vs. Ravens
>>> 49ers vs. Patriots

带索引的列表迭代
 

teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
 print index, team
>>> 0 Packers
>>> 1 49ers
>>> 2 Ravens
>>> 3 Patriots

列表推导式

已知一个列表,我们可以刷选出偶数列表方法:
 

numbers = [1,2,3,4,5,6]
even = []
for number in numbers:
 if number%2 == 0:
  even.append(number)

转变成如下:
 

numbers = [1,2,3,4,5,6]
even = [number for number in numbers if number%2 == 0]

是不是很牛呢,哈哈。

字典推导

和列表推导类似,字典可以做同样的工作:
 

teams = ["Packers", "49ers", "Ravens", "Patriots"]
print {key: value for value, key in enumerate(teams)}
>>> {'49ers': 1, 'Ravens': 2, 'Patriots': 3, 'Packers': 0}

初始化列表的值
 

items = [0]*3
print items
>>> [0,0,0]

列表转换为字符串
 

teams = ["Packers", "49ers", "Ravens", "Patriots"]
print ", ".join(teams)
>>> 'Packers, 49ers, Ravens, Patriots'

从字典中获取元素

我承认try/except代码并不雅致,不过这里有一种简单方法,尝试在字典中查找key,如果没有找到对应的alue将用第二个参数设为其变量值。
 

data = {'user': 1, 'name': 'Max', 'three': 4}
try:
 is_admin = data['admin']
except KeyError:
 is_admin = False
1

替换诚这样:
 

data = {'user': 1, 'name': 'Max', 'three': 4}
is_admin = data.get('admin', False)

获取列表的子集

有时,你只需要列表中的部分元素,这里是一些获取列表子集的方法。

x = [1,2,3,4,5,6]
#前3个
print x[:3]
>>> [1,2,3]
#中间4个
print x[1:5]
>>> [2,3,4,5]
#最后3个
print x[-3:]
>>> [4,5,6]
#奇数项
print x[::2]
>>> [1,3,5]
#偶数项
print x[1::2]
>>> [2,4,6]

60个字符解决FizzBuzz

前段时间Jeff Atwood 推广了一个简单的编程练习叫FizzBuzz,问题引用如下:

    写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”。

这里就是一个简短的,有意思的方法解决这个问题:
 

for x in range(101):print"fizz"[x%3*4::]+"buzz"[x%5*4::]or x

集合

除了python内置的数据类型外,在collection模块同样还包括一些特别的用例,在有些场合Counter非常实用。如果你参加过在这一年的Facebook HackerCup,你甚至也能找到他的实用之处。
 

from collections import Counter
print Counter("hello")
>>> Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})

 迭代工具

和collections库一样,还有一个库叫itertools,对某些问题真能高效地解决。其中一个用例是查找所有组合,他能告诉你在一个组中元素的所有不能的组合方式
 

from itertools import combinations
teams = ["Packers", "49ers", "Ravens", "Patriots"]
for game in combinations(teams, 2):
 print game
>>> ('Packers', '49ers')
>>> ('Packers', 'Ravens')
>>> ('Packers', 'Patriots')
>>> ('49ers', 'Ravens')
>>> ('49ers', 'Patriots')
>>> ('Ravens', 'Patriots')

False == True

比起实用技术来说这是一个很有趣的事,在python中,True和False是全局变量,因此:
 

False = True
if False:
 print "Hello"
else:
 print "World"
>>> Hello
Python 相关文章推荐
Python获取脚本所在目录的正确方法
Apr 15 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
详解Python3 基本数据类型
Apr 19 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
基于python判断目录或者文件代码实例
Nov 29 Python
python实现12306登录并保存cookie的方法示例
Dec 17 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 #Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 #Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 #Python
举例讲解Python中is和id的用法
Apr 03 #Python
详解Python2.x中对Unicode编码的使用
Apr 03 #Python
对于Python中线程问题的简单讲解
Apr 03 #Python
python BeautifulSoup设置页面编码的方法
Apr 03 #Python
You might like
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
利用python实现AR教程
2019/11/20 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
一套C#面试题
2013/10/09 面试题
自我评价的范文
2014/02/02 职场文书
经典洗发水广告词
2014/03/13 职场文书
安全学习心得体会范文
2016/01/18 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
python实现三次密码验证的示例
2021/04/29 Python
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Java并发编程之Executor接口的使用
2021/06/21 Java/Android