推导式创建序列
推导式是从一个或多个迭代器快速创建序列的一种方法. 它可以将循环和条件判断结合. 从而避免冗长的代码. 推导式是金典的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 循环.
统计文本中字符串出现的次数:
集合推导式
集合推导式生成集合, 和列表推导式的语法类似:
{表达式 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>
我们发现提示的是 "一个生成器对象". 显然, 元组是没有推导式的.
一个生成器只能运行一次. 第一次迭代可以得到数据, 第二次迭代发现数据已经没有了.