给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 相关文章推荐
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
python获取当前日期和时间的方法
Apr 30 Python
python交互式图形编程实例(二)
Nov 17 Python
Sanic框架安装与简单入门示例
Jul 16 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python模块相关知识点小结
Mar 09 Python
python函数中将变量名转换成字符串实例
May 11 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python numpy矩阵处理运算工具用法汇总
Jul 13 Python
python rsa-oaep加密的示例代码
Sep 23 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
python 实现弹球游戏的示例代码
Nov 17 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
php常用Stream函数集介绍
2013/06/24 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
php实现的操作excel类详解
2016/01/15 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
javascript 面向对象继承
2009/11/26 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vue实现分页组件
2020/06/16 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python3实现随机数
2018/06/25 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
学校门卫岗位职责
2014/03/16 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
什么是SOLID
2022/03/24 Javascript