转自:http://www.liujiangblog.com/course/python/36
Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮你在某些场合写出比较精简炫酷的代码。但没有它,也不会有太多的影响。Python语言有几种不同类型的推导式,下面逐一介绍:
1. 列表推导式
列表推导式是一种快速生产列表的方式。其形式是用方括号括起来的一段语句,如下例子所示:
list = [x*x for x in range(1,10)]
print(list)
----------------------------------
[1, 4, 9, 16, 25, 36, 49, 64, 81]
列表推导式要这么理解,首先执行for循环,对于每一个x,带入x*x中进行运算,将运算结果逐一添加到一个新列表内,循环结束,得到最终列表。它相当于下面的代码:
list = []
for i in range(1,10):
list.append(i*i)
print(list)
列表推导式为我们提供了一种在一行内实现较为复杂逻辑的生成列表的方法。其核心语法式用中括号[]将生成逻辑封装起来。
列表推导式有多种花样玩法:
- 增加条件语句
>>>[x*x for x in range(1,10) if x%2 == 0]
[4, 16, 36, 64]
通过在后面添加if子句,对x进行过滤。
- 多重循环
>>> [a+b for a in '123' for b in 'abc']
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
- 更多用法
>>> dic = {"k1":"v1","k2":"v2"}
>>> a = [k+":"+v for k,v in dic.items()]
>>> a
['k1:v1', 'k2:v2']
2.字典推导式
既然使用中括号[]可以编写列表推导式,那么使用大括号呢?你猜对了,使用大括号可以制造字典推导式。
dic = {x : x**2 for x in (2,4,6)}
print(dic)
----------------------------------
{2: 4, 4: 16, 6: 36}
3. 集合推导式
大括号除了能用作字典推导式,还可以用作集合推导式,两者仅在细微处有差别。
a = {x for x in 'abracadabra' if x not in 'abc'}
--------------------------------------
{'r', 'd'}
4. 元组推导式?
没有元祖推导式。圆括号在Python中被用作生成器的语法了。
tup = (x for x in range(9))
print(tup)
print(type(tup))
----------------------------
<generator object <genexpr> at 0x107ea8f90>
<class 'generator'>
要通过类似方法生成元组,需要显示调用元组的类型转换函数tuple(),如下所示:
tup = tuple(x for x in range(9))
print(tup)
print(type(tup))
----------------------------------
(0, 1, 2, 3, 4, 5, 6, 7, 8)