给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 相关文章推荐
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
python random从集合中随机选择元素的方法
Jan 23 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
Python代码生成视频的缩略图的实例讲解
Dec 22 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
利用PyTorch实现VGG16教程
Jun 24 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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
Mysql的常用命令
2006/10/09 PHP
PHP实现文件下载详解
2014/11/27 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
浅谈Python中数据解析
2015/05/05 Python
Python中的getopt函数使用详解
2015/07/28 Python
Python计算字符宽度的方法
2016/06/14 Python
python实现简单登陆流程的方法
2018/04/22 Python
Python单元和文档测试实例详解
2019/04/11 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
委托书的格式
2014/08/01 职场文书
少先队活动总结
2014/08/29 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python