Python 推导式详解

746 阅读2分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

推导式,又称解析式,是Python的一种独有特性,推导式是可以从一个数据序列构建另一个新的数据序列的结构体,共有三种推导式:

  • 列表推导式
  • 字典推导式
  • 集合推导式

接下来将一一介绍一下。

列表推导式

语法:

  • 变量名 = [<表达式> for <变量> in <迭代器>,...]
  • 变量名 = [<表达式> for <变量> in <迭代器> if <条件>]

它的结构是在一个中括号[]里包含一个表达式,然后是一个或多个for循环语句,遍历出序列中的元素赋值给变量,表达式根据变量值进行逻辑运算,表达式可以是任意的。存在if判断语句时,要先进行判断,符合条件的元素再给表达式进行运算,返回结果是一个新的列表,是以 iffor语句为上下文的表达式运行完成产生的新列表。

示例

  • 创建一个100以内所有整数的列表:
list1 = [i for i in range(100)]
print(list1)
  • 创建一个一个100以内所有偶数的列表:
list1 = [i for i in range(100) if i % 2 == 0]
print(list1)

有两个列表[1,2,3]和[7,8,9],创建一个包含这两个列表的元素乘积的列表:

print([a*b for a in [1,2,3] for b in [7,8,9]])
# [7, 8, 9, 14, 16, 18, 21, 24, 27]

集合推导式

集合推导式跟列表推导式是类似的,语法也一样,唯一的区别在于集合推导式使用大括号{},生成的结果是集合。 因为Python中的集合set是一个无序的不重复元素序列,所以集合推导式也是自带去重效果的。

例如,计算列表内元素的平方:

set1 = {i*i for i in [1,2,2,3]}
print(set1)
# {1, 4, 9}

字典推导式

字典推导式和列表推导式的使用方法也是类似的,语法也差不多,只不过产生的结果是字典而已。

例如,将字典的键全部换成大写:

dict1 = {'a': 10, 'b': 20, 'c': 30, 'd': 40}
dict2 = {k.upper(): v for k, v in dict1.items()}
print(dict2)
# {'A': 10, 'B': 20, 'C': 30, 'D': 40}

总之,在处理序列时,推导式是一种高效简洁的方式,但是当需要在循环中创建各种临时的中间数据时,推导式就不再合适了,还是要使用for循环处理。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !