地址:http://www.codeproject.com/Tips/829060/Python-Code-Optimizations-Part-One

转发过来保存一下。喜欢精雕细琢,编程才有乐趣。作者牛。

Introduction

Listed below are some very common day to day usage scenarios, and a way to do them pythonically!

Using the Code

1. Looping over a Range of Numbers

Hide   Copy Code
for i in [0,1,2,3,4,5]:
print i**2
Better way (looks better):
Hide   Copy Code
for i in range(6):
print i**2

What Happens in this Loop?

range produces a list in memory and then the for loop loops over the list.
Both create a list of 6 integers in memory and then iterate over each
number, raise it to power 2 and then print. Thus, both the loops do
exactly the same thing in exactly the same way!

Pythonic way: Use xrange()
Hide   Copy Code
#Python 2.x
for i in xrange(6):
print i**2 #Python 3.x
for i in range(6):
print i**2

What is xrange?

  • xrange is a sequence object that evaluates lazily.
  • xrange creates an iterator over the range(list) and yields one number at a time, thus consuming less amount of memory than the methods above.

2. Looping Over a Collection

Hide   Copy Code
colours = ['red', 'green', 'blue', 'yellow']

for i in range(len(colours)):
print colours[i]
Pythonic way
Hide   Copy Code
for colour in colours:
print colour

3. Looping Over a Collection and its Indices

Hide   Copy Code
for i in range(len(colours)):
print i, '-->', colours[i]
Pythonic way: use enumerate()
Hide   Copy Code
for i, colour in enumerate(colours):
print i, '-->', colour

4. Looping Backwards

Hide   Copy Code
for i in range(len(colours), -1, -1, -1):
print colours[i]
Pythonic way: Use reversed()
Hide   Copy Code
for colour in reversed(colours):
print colour

5. Loooping in Sorted Order

Pythonic way: Use sorted()
Hide   Copy Code
for colour in sorted(colours):
print colour

Looping Backwards in Sorted Order

Just add reverse=True to the sorted function arguments list.

Pythonic Way
Hide   Copy Code
for colour in sorted(colours, reverse=True):
print colour

6. Looping Over Two Collections

Hide   Copy Code
names = ['a', 'b', 'c']
colours = ['red', 'green', 'blue', 'yellow'] n = min(len(colours), len(names)) for i in range(n):
print names[i], '-->', colours[i]
Better Way
Hide   Copy Code
for name, colour in zip(names, colours):
print name, '-->', colour

zip creates a third list in memory which consists of tuples, each of which is its own separate object with pointers back to the original. In other words, it takes far more memory than the original two lists combined.
Most importantly "It doesn't scale!".

Pythonic Way: use izip()
Hide   Copy Code
from itertools import izip
for name, colour in izip(names, colours):
print name, '-->', colour

For smaller lists, zip is faster, but if you have lists with millions of records, then better use izip, as izip only advances the underlying iterators when needed.

python代码优化---就喜欢细节的更多相关文章

  1. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

  2. Python 代码优化常见技巧

    代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方 ...

  3. python代码优化技巧

    转自:http://www.douban.com/group/topic/31478102/ 这个资料库还有些不错的好文章: http://www.ibm.com/developerworks/cn/ ...

  4. python函数的参数细节

    按"指针"传递 python中变量赋值.参数传递都是通过"指针"拷贝的方式进行的.除了按"指针"拷贝,还有一种按值拷贝的方式,关于按值.按指 ...

  5. Python 代码优化技巧(一)

    Table of Contents 1. 代码优化Part1 1.1. if 判断的短路特性 1.2. join 合并字符串 1.3. while 1 和 while True 1.4. cProfi ...

  6. Python代码优化概要

    Python即是面向过程语言,也是面向对象语言,很多其它情况下充当脚本语言的角色.虽是脚本语言,但相同涉及到代码优化的问题,代码优化可以让程序执行更快,它是在不改变程序执行结果的情况下使程序执行效率更 ...

  7. Python代码优化及技巧笔记(一)

    前言 这里是记录一些本人在开发过程中遇到的一些细节问题.与君共勉. 版权说明 著作权归作者全部.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga链接:http://bl ...

  8. 提高 python 效率的一些细节方式

    在列表里面计数 性能:第二种计数方法比第一种快6290倍,为啥因为Python原生的内置函数都是优化过的,所以能用原生的计算的时候,尽量用原生的函数来计算. 过滤一个列表 性能:第二种方法比第一种慢近 ...

  9. python为什么人们喜欢学习呢?

    软件的质和量. 既有量的积累也有质的区别.继承一定的前人研究基础. 基本上来说,python更加的注重可读性,一致性,可移植性,其中软件的质量也是比较的讲究的. python支持开发的高级重用机制,例 ...

随机推荐

  1. css 去除点击之后的虚线

    链接在被点击时会出现虚线框,即使松开了也仍然存在,在有的时候显得不美观.既然不好看,那就不要它.怎样去掉呢? 方法一 IE下可使用其私有的html属性:hideFoucs,在标签的结构中加入hidef ...

  2. c#判断闰年

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 21.2 Partitioning Types

    分区类型: range:根据列值得一个给定的范围 list:和range相似,除了分区被选择基于的列被匹配在一个被设定为分离的值 hash 基于列组成的表达式返回的非负值 key  相似hash ,除 ...

  4. Error: Cannot open main configuration file '//start' for reading! 解决办法

    当执行service nagios start启动nagios时,报错:Error: Cannot open main configuration file '//start' for reading ...

  5. 操作素有的ul的元素

    1 $(function() { var all = $(".test"); $(".test").each(function() { var y = $(th ...

  6. BZOJ1801:[Ahoi2009]chess 中国象棋

    Time Limit: 10 Sec  Memory Limit: 64 MB Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置 ...

  7. django框架的models

    在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...

  8. c++截取英文和汉字(单双字节)混合字符串

    在C++里截取字符串可以使用CString.Mid(),可是这个函数只能按英文(单字节)来截取, 如果是汉字可能就要计算好字符个数,如果是汉字和英文混合,那就没辙了. 可是恰好我需要这样一个函数,于是 ...

  9. JS正则2

    正则表达式可以:•测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证•替换文本.可以在文档中使用一个正则表达式来标 ...

  10. bootstrap 模态 modal 小例子

    bootstrap 模态 modal  小例子 <html> <head> <meta charset="utf-8" /> <title ...