列表解析:是指在原列表的基础之上生成新的列表

列表解析式生成列表,通过for循环也可以实现,优势在于列表表达式比for循环快。

列表解析表达式:


表达式一

[expression for iter_var in iterable]

将迭代对象(iterable)中的值赋给iter_var,并执行expression


例:

>>> a = [1,2,3,4,5]

>>> b = [i**2 for i in a]

>>> b

[1, 4, 9, 16, 25]


将a中的值,赋给i,i执行i**2,所得值生成b


表达式二:

[expression for iter_var in iterable if condition]

将迭代对象(iterable)中的值取出,如果满足contion,则赋给iter_var,并执行expression


例:

>>> a = [1,2,3,4,5]

>>>c = [i**2 for i in a if i % 2 == 0 and i >=3]

>>> c

[16]

将a中的值取出,并且值为偶数且大于3,则执行i**2,生成c


生成器:列表解析可以生成列表,全部写入内存,如果只需要访问前几个对象,会造成内存的浪费,所以,生成器是循环生成对象,用next()调用


生成器表达式:

(expression for iter_var in iterable)

(expression for iter_var in iterable if condition)


用法与列表生成式相同


例:

>>> g1 = (i**2 for i  in range(1,11))     #########生成器对象

>>> g1

at 0x7f1d66848a50>

>>> g1.next()

1              ############调用一次生成一个值,不调用不生成

>>> g1.next()

4

>>> g1.next()

9

>>> g1.next()

16

>>> g1.next()

25

>>> g1.next()

36

>>> g1.next()

49

>>> g1.next()

64

>>> g1.next()

81

>>> g1.next()

100