给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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
Python解析nginx日志文件
May 11 Python
深入理解python对json的操作总结
Jan 05 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
python遍历路径破解表单的示例
Nov 21 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
安装APACHE
2007/01/15 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP中echo和print的区别
2014/08/28 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python的unittest测试类代码实例
2017/12/07 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
python构建基础的爬虫教学
2018/12/23 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
大学运动会入场词
2014/02/22 职场文书
大型公益活动策划方案
2014/08/20 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
Python实现批量自动整理文件
2022/03/16 Python
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android