推导式创建序列

推导式是从一个或多个迭代器快速创建序列的一种方法. 它可以将循环和条件判断结合. 从而避免冗长的代码. 推导式是金典的Python 风格,会使用它代表你以超过 Python 初学者的水平.

列表推导式

列表推导式生成列表对象, 语法如下:

    [表达式 for item in 可迭代对象]

    或者: {表达式  for item in 可迭代对象 if 条件判断}

>>> [x for x in range(1,5)]

[1,  2, 3, 4]

>>>[x*2 for x in range(1,5)]

[10, 20, 30]

>>> [x*2 for x in range (1,20) if x%5 == 0]

[10, 20, 30]

>>>[a for a in "abcdefg"]

["a", "b", "c", "d", "e", "f", "g"]

>>> cells = [(row,col) for row in range(1,10) for col in range(1,10)]    #可以使用两个循环

>>> for cell  in cells

    print(cell)

字典推导式

字典推导式生成字典对象, 格式如下:

    {key_expression : value_expression for 表达式 in 可迭代对象}

类似于列表推导式, 字典推导式可以增加 if 条件判断, 多个 for 循环.

统计文本中字符串出现的次数:

Python 第五节 第七课_迭代

集合推导式

集合推导式生成集合, 和列表推导式的语法类似: 

    {表达式 for item in 可迭代对象}

    或者{表达式 for item in 可迭代对象 if 条件判断}

>> {x for x in range(1,100) if x%9 == 0}

{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}

生成器推导式 ( 生成元组 )

很多同学肯会问: "都有推导式, 元组有没有?", 能不能用小括号呢?

>>> x for x in range(1,100) if x%9 == 0

<generator object <genexpr> at 0x000001BA01CC5570>

我们发现提示的是 "一个生成器对象". 显然, 元组是没有推导式的.

一个生成器只能运行一次. 第一次迭代可以得到数据, 第二次迭代发现数据已经没有了.

Python 第五节 第七课_条件判断_02

Python 第五节 第七课_条件判断_03