Python 列表表达式和生成器表达式

列表解析:[expr for iter_var in iterable if cond_expr]

生成器表达式:expr for iter_var in iterable if cond_expr

前者返回一个列表,后者返回一个生成器,处理大数据时,节约内存,效率更高。

 

常见:

L= [(x+1,y+1) for x in range(3) for y in range(5)]

stuff = [[w.upper(), w.lower(), len(w)] for w in words]

len[word for line in f for word in line.split()]

sum(len(word) for line in f for word in line.split())

生成器表达式使用了“惰性计算”(lazy evaluation,也有翻译为“延迟求值”,call by need,只有在检索时才被赋值( evaluated),所以在列表比较长的情况下使用内存上更有效。A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them.

 

一些说明:

1. 当需要只是执行一个循环的时候尽量使用循环而不是列表解析

  1. for item in sequence:
  2.     process(item)

2. 当有内建的操作或者类型能够以更直接的方式实现的,不要使用列表解析。

例如复制一个列表时,使用:L1=list(L)即可,不必使用:

  1. L1=[x for x in L]

3. 当序列过长, 而每次只需要获取一个元素时,使用生成器表达式。

4. 列表解析的性能相比要比map,filter好

来源:http://blog.csdn.net/seasky11/article/details/7876159

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>