给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中的__init__()方法
May 02 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
Python列表生成式与生成器操作示例
Aug 01 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
Python学习笔记之For循环用法详解
Aug 14 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python 循环数据赋值实例
Dec 02 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
python线程里哪种模块比较适合
Aug 02 Python
python如何修改文件时间属性
Feb 05 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
让这部DC动画新作刷新你的认知
2020/03/03 欧美动漫
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
自己动手做一个SQL解释器
2006/10/09 PHP
安装APACHE
2007/01/15 PHP
php 删除cookie和浏览器重定向
2009/03/16 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
jQuery创建插件的代码分析
2011/04/14 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
Python实现控制台进度条功能
2016/01/04 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python如何删除文件、目录
2020/06/23 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
会议活动邀请函
2014/01/27 职场文书
读群众路线的心得体会
2014/09/03 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
盲山观后感
2015/06/11 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python