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

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

列表生成式

nums = [2 ** i for i in range(1, 11)]

这行代码就是我们这个章节要所讲的列表生成式。顾名思义,列表生成式最终生成的是一个列表,它是用已有的可迭代对象来构造新列表的便捷方法。

列表生成式的写法

列表生成式的语法如下: [对项的操作 for 项 in 可迭代对象]

列表生成式中使用 if

在列表生成式的中,每次迭代的 项 是可以被筛选过滤的,使用 if 关键字。如: [对项的操作 for 项 in 可迭代对象 if 对项的判断]

列表生成式中嵌套 for

列表生成式中的 for 中还可以再嵌套 for。如:[对项1和(或)项2的操作 for 项1 in 可迭代对象1 for 项2 in 可迭代对象2]

字典生成式

便捷地构造列表可以使用列表生成式,同样的,想要通过已有的可迭代对象来便捷地构造字典,可以使用字典生成式。
字典生成式的写法是:{键: 值 for 项 in 可迭代对象}

集合生成式

你可能已经猜到了,只需要将列表生成式的方括号([])替换为花括号({})即可:{对项的操作 for 项 in 可迭代对象}

生成器表达式

Python 中并没有「元组生成式」!虽然 Python 中确实有类似的圆括号的写法:(对项的操作 for 项 in 可迭代对象)
但这可不是什么「元组生成式」,而是我们上一章节学习过的生成器表达式。

生成器表达式是一种创建生成器的便捷方法。虽然写法上和列表生成式、字典生成式、集合生成式相似,却有着本质的不同,因为它创建出来的是生成器,而不是列表、字典、集合这类容器。 (char.lower() for char in ‘ABCDEF’)

>>> g = (char.lower() for char in ‘ABCDEF’)
>>> g
<generator object at 0x103da6c78>
>>> next(g)
‘a’
>>> next(g)
‘b’

生成器表达式中同样可以使用 if 和嵌套 for,使用方法和列表生成式相同。