列表解析和生成式表达式

来源:互联网 发布:工可网软件 编辑:程序博客网 时间:2024/06/06 20:23
列表解析和生成式表达式
试想有这样一个需求:我们已经有了列表listA、listB,现在需要生成列表listC,使得listC是listA中每个元素+1的结果,或者是A和B相加的结果,应该如何做?
本节,我们就学习于此相关的技术——列表解析和生成式表达式。

1.需求
python的设计原则之一是简洁,因此我们常常需要快速创建对象,而不用像C语言那样实现整个细节。C语言中的处理,实际上值针对每一个内存对象的操作;在python中
我们更多的利用函数式编程的思想——尽管python不是一门函数式语言。

2.列表解析原理

》》[x**2 for x in range(6)]
【0,1,4,9,16,25】
上面是列表解析的一个简单例子,抽象出来:
[expr for iter_var in iterable]
进一步可以这样抽象:x属于集合A,对集合A中的每个元素x执行f(x):[f(x) for x in A]
[expr for iter_var in iterable if cond_expr]
进一步:复合函数的抽象
>>>f=open("text.txt","r")
>>>len([word for line in f for word in line.split()])

3.生成器表达式

在列表解析中,新生成的列表全部在内存中,比较占用空间。我们现在需要实现“延迟计算”,所以就用到了生成器表达式。语法和列表解析基本相同
[expr for iter_var in iterable]变成了:
(expr for iter_var in iterable)
0 0