原创,如转载请注明出处http://blog.csdn.net/menglongli/article/details/17450607
概念
首先说一下什么是列表解析:
基本概念就是一种语法结构,其存在是为了方便通过已有列表,去方便快速创建新的列表。
[expression for target1 in iterable1 [if condition1]
for target1 in iterable2 [if condition2]
for target1 in iterable3 [if condition3]
for target1 in iterable4 [if condition4]
... .... ... .... ... ... ... ... ... ... ... ... ... ... .
for targetN in iterableN [if conditionN]]
以上便是通用的表达式;
性能
这里说他速度快,主要是和写for循环相比。
列表解析的速度很快,因为循环是在C而不是在Python中执行。
我写了几行代码来进行一下比较,给大家一点直观的感受
比如现在给定一个小写字母的列表形如['a', 'b' , 'c',....'y', 'z', 'a' ,'b',.....]
生成如上列表的代码如下:
myAlphaList=map(chr,range(97,123))*10000
现在想要生成另外一个列表,里面的字母和上面相同,但是要求均为大写,为了实现这一小功能,我写了几个不同的函数,然后我会分别对其进行“跑分”看一下效果:
这里用来“跑分”的计时函数,如下:
from timeit import Timer
from functools import partial
def get_execution_time(function, *args, **kwargs):
"""Return the execution time of a function in seconds."""
numberOfExecTime = kwargs.pop('numberOfExecTime', 1)
return round(Timer(partial(function, *args, **kwargs))
.timeit(numberOfExecTime), 5)
下面分别是几个完成同样功能,即生成新的元素为大写的列表,但是实现方式有别的函数,代码如下:
def lstToUpperUsingRawFor(lst):
newLst=[]
length=len(lst)
for i in range(length):
newLst.append(lst[i].upper())
return newLst
def lstToUpperUsingForeach(lst):
newLst=[]
for e in lst:
newLst.append(e.upper())
return newLst
def lstToUpperUsingMap(lst):
newLst = map(str.upper, lst)
return newLst
def lstToUpperUsingListComprehension(lst):
newLst=[e.upper() for e in lst]
return newLst
然后我们调用一下这四个函数,分别看一下运行的速度:
n=50
print 'for',\
get_execution_time(lstToUpperUsingRawFor, myAlphaList,numberOfExecTime=n)
print &