给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中字典的键的使用
Aug 19 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python反射用法实例简析
Dec 22 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
python实现合并两个排序的链表
Mar 03 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
python函数超时自动退出的实操方法
Dec 28 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代码收集表单内容并写入文件的代码
2012/01/29 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
date.parse在IE和FF中的区别
2010/07/29 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
HTML5进度条特效
2014/12/18 HTML / CSS
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
毕业自我评价
2014/02/05 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
考勤制度通知
2015/04/25 职场文书
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android