使用Python列表解析功能简化列表操作
2024-06-16 0
简化的本意是省略内容的细节,聚焦要点,不陷入细节。如果你是一名新程序员,当你的项目经理或经理说你的代码需要简化时,你该怎么办?
1使用语句创建列表
我们首先看一个代码简化的例子。这个例子是创建一个Python列表,存储0到100之间的值。根据之前关于列表和循环的知识,代码应该这样写:
除了print语句之外,上面的代码还需要三个语句来创建numlist。如果我们要求你将这三句话简化为一句话来实现同样的功能,你能做到吗?答案当然是,如果你了解列表解析就可以完成。Python20中添加了列表理解功能。列表推导允许您在循环语句中使用表达式来迭代列表的成员。列表理解语法如下:
[exprforitervarinlistifcondexpr]
列表解析语法的核心是for语句,其中表达式是应用于列表每个成员的条件表达式,是由指向列表成员的itervar表达式生成的列表,是过滤或捕获列表成员的条件表达式即满足条件。一旦理解了列表解析语法,我们就可以使用列表解析在一条语句中实现上例的功能。
上面的代码执行相同的功能,但更简单。在上面的代码中,有些读者可能想知道为什么传递给range函数的参数是101而不是100,因为生成的整数序列不包含最终值。
2使用条件表达式过滤列表成员
如果上面例子的需求变成需要创建一个存储100以内偶数的Python列表,我们应该如何用列表解析来处理这个问题?Condexpr条件可用于满足创建要求。
列表推导允许您在for循环语句后添加条件表达式,并使用该条件表达式过滤掉不满足条件的列表成员。上面的代码中,添加了一个条件表达式来判断num是否为偶数。该条件表达式将num除以2取余并判断结果是否为0。如果为0,则将该值与k相加。否则,该值将被丢弃。代码的结果如下图所示。由于分数为100,所以截图不完整。
3用表达式初始化列表成员
现在案例需求又变了(程序员最怕需求变了,因为又得熬夜写代码),所以需要创建一个存储100以内偶数且是3的倍数的Python列表。。
上面的代码使用range函数创建从0到32的数字序列。for循环语句之前的乘法表达式num和3使列表中的所有成员都是3的倍数。for循环语句之后的条件表达式对序列进行过滤的数字。代码的输出如下图所示。
上面的代码创建了一个numlist,现在需要在nunlist的基础上修改numlist的成员,将numlist的每个成员扩大2倍,过滤掉能被5整除的值。
如果要在原始列表的基础上创建新列表,可以将原始列表的名称放在关键字和循环语句之后。循环语句将迭代原始列表的成员,并将满足条件表达式的成员传递给for循环语句之前的表达式,当评估for循环语句之前的表达式时,将添加新创建的列表。代码的输出如下图所示。
4使用Python的列表理解函数来管理数组
数组是由行和列组成的数据结构。数组的节点可以通过行索引和列索引来指定。例如,围棋棋盘由19条横线和19条竖线组成,形成361个节点。例如,学校教室中课桌的排列也是多行多列的数据结构,由包含课桌的行数和包含课桌的列数来指定。矩阵数据结构在计算机中由二维数组表示,可以使用Python语言中的嵌套列表来实现。以下代码创建一个3行5列的数组。
列表解析可以有多个for循环语句,每个for循环语句对应一个表达式,也允许列表嵌套。输出如下图所示。
应该注意的是,列表推导不仅适用于列表,还适用于其他序列对象。
本站文章均由用户上传或转载而来,该文章内容本站无法检测是否存在侵权,如果本文存在侵权,请联系邮箱:2287318951@qq.com告知,本站在7天内对其进行处理。