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

来源:互联网 发布:网络不稳定是什么原因 编辑:程序博客网 时间:2024/06/05 01:00

列表解析

在需要改变列表而不是需要新建列表时,可以使用列表解析。列表解析表达式:

[exp for iter_var in iterable]
第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

[exp for iter_var in iterable if cond_exp]

第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

例:

生成一个3行5列矩阵

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

L

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

遴选大于5的数参与计算

N = [x + 10 for x in range(10) if x > 5]
N

[16, 17, 18, 19]

生成器表达式

生成器表达式是在python2.4中引入的,当序列过长, 而每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析,也就是说采用了一个更加友好的内存结构。生成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的,而不是[],如下:

(exp for iter_var in iterable)

(exp for iter_var in iterable if cond_exp)

例:

L = (i + 1 for i in range(10) if i % 2)

L

0 0
原创粉丝点击