持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
导语
Python 推导式可以从一个数据序列构建另一个新的数据序列。日常应用中,经常用推导式来简化程序表达,提高效率。本文记录了关于四种Python推导式的学习笔记。
简介
Python 支持以下数据结构的推导式:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
- 元组(tuple)推导式
列表推导式
这个是日常编写代码中最常用的一种形式,比如,我们需要计算0到9的所有自然数的平方值,第一种想到的方式就是使用for循环逐个生成,即
squares = []
for x in range(10):
squares.append(x**2)
上面这段代码创建(或覆盖)变量 x,该变量在循环结束后仍然存在。在Python中,提供了一种更加高效的实现方式,即列表推导式:
squares = [x**2 for x in range(10)]
上面这种写法更简洁、易读。
列表推导式的方括号内包含以下内容:一个表达式,后面为一个 for 子句,然后,是零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。
下面来看一个结合if else的例子,假设我们要对所有从1到10的自然数中,奇数取平方值,偶数取负值构成一个新的列表,我们可以使用以下方式:
result = [-x if x%2==0 else x**2 for x in range(1, 11)]
打印后结果为:
如果不使用推导式,展开这段代码将会比较繁琐复杂。可以看到使用列表推导式后,大大减少了复杂度,代码也变得简洁。
字典推导式
字典推导式的形式与列表推导式相仿,举个例子:
假设我们要生成一个这样的字典,他的键是从0到9的自然数,值则是对应的平方值,那么可以使用字典推导式:
{x: x**2 for x in range(10)}
集合推导式
集合推导式基本格式如下:
{ expression for item in Sequence }
假设我们要生成1到10的自然数的平方值的集合,那么可以这样表示:
result = {x**2 for x in range(1,11)}
元组推导式
其格式与之前的几种推导式相仿,只是把最外层换成了元组的括号,如:
result = (x**2 for x in range(1,11))
总结
Python中的推导式是一种强大的数据表达形式,可以帮助我们简化代码书写,提高效率。