给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操作CouchDB数据库简单示例
Mar 10 Python
python装饰器初探(推荐)
Jul 21 Python
Python实现自动上京东抢手机
Feb 06 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
python实现根据文件格式分类
Oct 31 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
python3 sqlite3限制条件查询的操作
Apr 07 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Angular整合zTree的示例代码
2018/01/24 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
推荐11个实用Python库
2015/01/23 Python
python冒泡排序简单实现方法
2015/07/09 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python使用Tesseract库识别验证
2018/03/21 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
工程总经理工作职责
2013/12/09 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android