注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
本文阅读时间约为3分钟。
什么是推导式
推导式是一个或者多个迭代器,快速简洁地创建数据结构的一种方法。
推导式将循环和条件判断结合,从而避免语法冗长的代码。
推导式可以生成列表、字典和集合。
列表、字典、集合推导式的语法
列表推导式的语法为:
[<表达式> for <变量> in <可迭代对象> if <逻辑条件>]
字典推导式的语法为:
{<键表达式>: <值表达式> for <变量> in <可迭代对象> if <逻辑条件>}
集合推导式的语法为:
{<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
推导式的一些实例
下面是关于列表推导式、字典推导式、集合推导式的一些实例。
# 列表推导式的实例。
[x ** 2 for x in range(10)]
Out[8]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 字典推导式的实例。
{f"K{x}": x ** 3 for x in range(10)}
Out[3]:
{'K0': 0,
'K1': 1,
'K2': 8,
'K3': 27,
'K4': 64,
'K5': 125,
'K6': 216,
'K7': 343,
'K8': 512,
'K9': 729}
#集合推导式的实例。
{x+y for x in range(10) for y in range(x)} # 嵌套循环推导式。
Out[4]: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
#上述实例推导式的实例等价于:
S = set()
for x in range(10):
for y in range(x):
S.add(x+y)
print(S)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17}
生成器推导式
与推导式一样语法,但使用圆括号的:
(<表达式> for <变量> in <可迭代对象> if <逻辑条件>)
返回一个生成器对象,也是可迭代对象。生成器对象并不立即产生全部元素,仅在要使用到元素的时候才生成,这样可以极大节省内存。
(x for x in range(5))
Out[9]: <generator object <genexpr> at 0x000001FD6D196948> # 生成器。
推导式的优势
拿列表推导式为例,如果我们有一个列表,并希望抽取列表中的元素,那么最标准的方法是使用循环,也可以通过列表推导式。两者其实是一样的,都是由创建、遍历和接收三部分组成。
推导式有两大优势:
第一,精简代码。相比循环,代码量由多行降低到一行,整个代码更简洁优雅。
第二,提升性能。这是非常重要的一点。推导式的速度相比循环快很多。
当然,推导式的可读性相对差一点。不过,相信你在熟练掌握循环的情况下,会很快习惯并喜欢上推导式的优雅的。
To be continued.