您的位置:首页 > 编程语言 > Python开发

Python之道–列表解析和生成器

2013-06-12 01:45 274 查看
Python版本:2.7.4主机环境:Gentoo with Linux Kernel 3.4.36原创作品,转载请标明:http://blog.geekcome.com/archives/78列表解析完成的功能可以使用for循环替代或者map调用来替代。对于刚开始使用Python的初学者,通常使用简单的for循环,逻辑清晰,这样会容易理解,特别是在嵌套的时候。性能对比:map调用比等效的for循环要快两倍,而列表解析往往比map解析要稍快一些。dex = [x ** 2 for x in range(10)]
print dexdex1 = list(map(lambda x:x ** 2,range(10)))
print dex1dex2 = []
for x in range(10):
    dex2.append(x ** 2)
print dex2第一个就是使用的列表解析产生的例子。第二个是使用map调用产生列表,第三个是使用for循环产生的列表。之所以列表解析速度会快,那是因为map和列表解析在解释器中以C语言的速度来运行的,比Python的for循环代码在PVM中步进要快的多。类表解析中也可以添加判断条件,实例如下:ifdex = [x ** 2 for x in range(10) if x % 2 == 0]
print ifdexifdex1 = list(filter((lambda x:x % 2 == 0),map(lambda x:x ** 2,range(10))))
print ifdex1ifdex2 = []
for x in range(10):
    if x % 2 == 0:
        ifdex2.append(x ** 2)
print ifdex2什么是生成器?生成器是为了在需要的时候才产生结果,而不是立即产生结果。这样会节省内存,而不用把所有的记录都加载到内存,并且允许计算时间分散到各个结果请求。实例如下:dex3 = []
for x in generator(10):
    dex3.append(x ** 2)
print dex3生成器的定于如下:def generator(N):
    for i in range(10):
        yield i生成器支持迭代器协议,内置next函数,通过dir(x)查看如下:['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'next', 'send', 'throw']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: