值得收藏!16段代码入门Python循环语句( 四 )


04 列表推导式推导式是可以从一个数据序列构建另一个新的数据序列的结构体,能够非常简洁地构造新的变量 。列表推导式是其中最常用的类型 。
列表推导式又称为列表解析式,是Python迭代机制的一种应用,也是一种高效创建列list的方式,可以动态地创建list 。由于列表推导式必须用到遍历循环,因此属于一种特殊的循环 。
使用列表推导式时,需要将推导式写在[]中 。list中的元素可以来源于其他类型序列、可迭代对象或自建的满足一定条件的序列 。使用列表推导式的好处是代码更加简洁,实现效率更高 。
列表推导式的基本语法格式如下:
[操作语句 for变量 in 序列 if 条件表达式] 列表推导式常用的参数及其说明如下所示:

  • 操作语句:接收操作语句,表示执行一段代码 。无默认值
  • 序列:接收序列,表示遍历范围 。无默认值
  • 条件表达式:接收布尔表达式,表示判断条件是否成立 。无默认值
列表推导式可以不包含条件表达式,只做遍历,生成list,如代码清单13所示 。
  • 代码清单13:使用列表推导式生成list
vec = [-4, -2, 0, 2, 4]# 用vec中元素的倍数,创建一个数组print([x * 2 for x in vec])输出结果:
[-8, -4, 0, 4, 8]# 创建一个包含2元tuple的listprint([(x, x ** 2) for x in range(6)]) 输出结果:
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] 在代码清单13中,除了列表推导式的简单形式,还说明了列表推导式中可以使用多样的函数和变量类型 。另外,列表推导式中也可以包含条件语句,如代码清单14所示 。
  • 代码清单14:包含条件语句的列表推导式
# 过滤list,删除list中的负数print([x for x in vec if x >= 0])输出结果:
[0, 2, 4]列表推导式最大的优点还是简洁,这需要与常规的编程方式进行对比 。如代码清单15所示,要创建一个平方数组成的list,这里的两种方式是等价的,但列表推导式的方式显然代码更加简洁 。
  • 代码清单15:常规方式与列表推导式对比
# 创建一个平方数list:常规方式squares = [] for x in range(10):squares.append(x ** 2) print(squares)输出结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 创建一个平方数list列表推导式squares = [x ** 2 for x in range(10)] print(squares) 输出结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]列表推导式中同样可以实现嵌套循环,如代码清单16所示 。
  • 代码清单16:包含嵌套循环的列表推导式
# 打印由tuple组成的list,tuple中i由0至2,j由0至2[(i, j) for i in range(0, 3) for j in range(0, 3)]输出结果:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]# 打印由tuple组成的list,i在0至2之间且小于1,j在0至2之间且大于1[(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1]输出结果:
[(0, 2)]代码清单16所示的列表推导式将两个不同list中的元素整合到了一起 。列表推导式中包含一对括号,在括号中有一个表达式,表达式后面紧跟一条for语句,然后是零条或多条for语句或if语句 。通过for语句和if语句计算出表达式,结果作为新list的元素 。
本文摘编自《Python3智能数据分析快速入门》,经出版方授权发布 。
值得收藏!16段代码入门Python循环语句

文章插图
延伸阅读《Python3智能数据分析快速入门》
推荐语:本书假设你有一定的数据分析基础,但是没有Python和AI基础,为了帮助你快速掌握智能数据分析需要的技术和方法,书中有针对性地讲解了Python和AI中必须要掌握的知识点,内容由浅入深,循序渐进 。从环境配置、基本语法、基础函数到第三方库的安装与使用,对各个操作步骤、函数、工具、代码示例等的讲解非常详尽,确保所有满足条件的读者都能快速入门 。




推荐阅读