解析式与生成器

列表解析式

语法

[返回值 for 元素 in 可迭代对象 if 条件]

使用中括号,内部是for循环,if条件语句可选。

返回值

一个新的列表

用处

简化代码,减少出错,因为是语法糖因此增加了效率。

举例

even = [x for x in range(10) if x % 2 == 0]

↑求10以内所有偶数。

进阶用法

if嵌套等价

[expr for item in iterable if condition1 if condition2]

for嵌套等价

[expr for item1 in iterable1 for item2 in iterable2 ]

生成器表达式

语法

(返回值 for 元素 in 可迭代对象 if 条件)

使用小括号,内部是for循环,if条件语句可选,不会立即返回列表,是惰性求值,只会返回生成器对象,写生成器的语句叫做生成器表达式。生成器表达式是用来生成生成器对象的。

返回值

一个生成器对象。

生成器对象

一个可迭代的迭代器对象

与列表解析式的对比

  • 计算方式

    • 生成器表达式惰性求值,列表解析式立即计算

  • 内存占用

    • 单纯从返回值来说,生成器表达式省内存。

    • 实际占用(累计)两者差距不大,生成器是多次少量占用,列表是一次性占用。

集合解析式

语法

{返回值 for 元素 in 可迭代对象 if 条件}

使用大括号,内部是for循环,if条件语句可选。

返回值

一个新的集合

字典解析式

语法

{返回值 for 元素 in 可迭代对象 if 条件}

使用大括号,内部是for循环,if条件语句可选,返回值是key:value 形式。

返回值

一个新的字典

Last updated