给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程序中操作MySQL的基本方法
Jul 29 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
python pandas dataframe 按列或者按行合并的方法
Apr 12 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
对numpy中向量式三目运算符详解
Oct 31 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
Javascript模板技术
2007/04/27 Javascript
JS 自动安装exe程序
2008/11/30 Javascript
常用的js方法合集
2017/03/10 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
JS实现放烟花效果
2020/03/10 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
简单了解python的内存管理机制
2019/07/08 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
C语言笔试题
2014/09/04 面试题
银行自荐信范文
2013/10/07 职场文书
司机辞职报告范文
2014/01/20 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
优秀团队获奖感言
2014/02/19 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
python xlwt模块的使用解析
2021/04/13 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS