推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的Python风格,会使用它代表你已经超过Python初学者的水平。
列表推导式
[表达式 for item in 迭代对象]或{表达式 for item in 迭代对象 if 条件判断}或{(item1,item2) for item1 in 迭代对象 for item2 in 迭代对象}
>>>[x for x in range(1,5)][1, 2, 3, 4]>>>[x for x in range(1,5) if x<4][1, 2, 3]>>>[(row,col) for row in range(1,5) for col in range(1,10)][(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)]
字典推导式
字典的推导式生成字典对象,格式如下:
{key表达式:value表达式 for item in 迭代对象 } #可增加if条件判断
类似于列表推导式,字典推导也可以增加if条件判断、多个for循环。
【操作】统计文本中字符出现的次数:
>>>str="完美岛ai是个ai导航工具">>>count={key:str.count(key) for key in str}{'完': 1, '美': 1, '岛': 1, 'a': 2, 'i': 2, '是': 1, '个': 1, '导': 1, '航': 1, '工': 1, '具': 1}
集合推导式
集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 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 0x0000000002BD3048>
我们发现提示的是”一个生成器对象”。显然,元组是没有推导式的。
一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。
>>>gnt=(x for x in range(4)) print(gnt)<generator object <genexpr> at 0x0000026867C14E80>>>>for x in gnt: print(x,end=",")(0, 1, 2, 3)>>>print(tuple(gnt))()