Logo

郎哥编程

列表解析表达式

2020-12-29 147

简化的原意是略去内容的细节而抓住主干,当你被要求叙事简化时,就是让你叙述事情时别啰里啰嗦,抓住事情的主干来说,不要陷入事情的细节。如果你是刚入门的程序员,当你的项目经理或领导说你的程序代码需要简化时,你该怎么做呢?

使用一条语句来创建列表

我们先来看一个简化代码的案例,这个案例是创建一个存储从数值0到数值100的Python列表,依据前面学过的列表和循环知识,代码应该这么写:

#创建列表
numlist=[]
#添加列表元素
for i in range(101):
  numlist.append(i)
#输出列表
print(numlist)

上面的代码除了print语句外,创建numlist列表需要三条语句,如果要求你把这三条语句简化为一条语句,实现同样的功能,你能做到吗?答案自然是能做到,前提是要掌握列表解析的知识。列表解析功能是在Python2.0加入的,列表解析允许在for循环语句中使用表达式对列表成员进行迭代操作。列表解析表达式的语法如下:

[expr for iter_var in list if cond_expr]

列表解析语法的核心是for循环语句,其中expr是表达式,该表达式用于list的每个成员,最后的结果值是该表达式产生的列表,iter_var是迭代变量,指向list的成员,cond_expr是条件表达式,该条件表达式会过滤或捕获满足条件的list成员,cond_expr不是必须的。

了解了列表解析的语法,我们就可以使用列表解析表达式用一条语句来实现上面案例代码的功能。

#使用列表解析表达式创建列表
numlist=[num for num in range(101)]
#输出列表
print(numlist)

上面的代码实现了同样的功能,但相对简化多了。

使用条件表达式过滤列表元素

假如上面案例的需求有所变动,要求创建一个存储100以内偶数的Python列表,用列表解析该如何处理呢?可以使用cond_expr条件表达式来满足创建要求。

#使用列表解析创建列表
numlist=[num for num in range(101) if num % 2 == 0]
#输出列表
print(numlist)

列表解析允许在for循环语句的后面添加一个条件表达式,使用该条件表达式可以过滤不满足条件的列表成员。在上面的代码中,添加了判断num是否是偶数的条件表达式,该条件表达式对num进行除2取余操作,并判断结果是否为0,若为0则该数值被添加到列表中,否则该数值被过滤掉。

用表达式初始化列表元素

现在案例需求又有所变动(程序员最害怕的就是需求变动,因为又要熬夜写代码了),要求创建一个存储100以内偶数且是3的倍数的Python列表。

#使用列表解析创建列表
numlist=[num * 3 for num in range(101) if num % 2 == 0]
#输出列表
print(numlist)

上面的代码利用range函数产生0至100的整数序列,for循环语句前面num与3相乘的表达式让list的成员都是3的倍数,for循环语句后面的条件表达式过滤了整数序列中的奇数。

上面的代码创建了numlist列表,现在要求在numlist的基础上,修改numlist的成员,将numlist的每个成员扩大2倍,并过滤掉能够被5整除的整数。

#使用列表解析创建列表
numlist=[num * 3 for num in range(101) if num % 2 == 0]
print(numlist)
#修改列表
numlist=[num * 2 for num in numlist if num % 5 ]
print(numlist)

在原有列表的基础上创建一个新的列表,可以将原有列表的名称放在for循环语句的in关键字后面,循环语句将会迭代原有列表的成员,并将符合条件表达式的成员经过for循环语句前面的表达式运算后,添加到新创建的列表中。

创建矩阵

矩阵是由行和列组成的数据结构,通过行下标和列下标可以确定矩阵的一个元素。

例如围棋棋盘是由19条横线和19条纵线组成,形成361个元素。再如,学校教室课桌的安排也是多行多列的数据结构,课桌的位置由课桌所在的行数和课桌所在的列数确定。

矩阵数据结构在计算机中是用二维数组表示的,在Python语言中可以使用嵌套的列表来实现。下面的代码创建一个3行5列的矩阵。

row,col = 3,5
matrix =  [[x*3 for x in range(col)] for y in range(row)]
print(matrix)

需要注意的是,列表解析表达式不仅仅用于列表,也用于其它序列对象。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论