数据结构论坛

首页 » 分类 » 分类 » 使用Python列表解析功能简化列表操作
TUhjnbcbe - 2024/8/25 16:14:00
北京那治疗白癜风 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/
简化的原意是略去内容的细节而抓住主干,当你被要求叙事简化时,就是让你叙述事情时别啰里啰嗦,抓住事情的主干来说,不要陷入事情的细节。如果你是刚入门的程序员,当你的项目经理或领导说你的程序代码需要简化时,你该怎么做呢?1、使用一条语句来创建列表我们先来看一个简化代码的案例,这个案例是创建一个存储从数值0到数值的Python列表,依据前面学过的列表和循环知识,代码应该这么写:上面的代码除了print语句外,创建numlist列表需要三条语句,如果要求你把这三条语句简化为一条语句,实现同样的功能,你能做到吗?答案自然是能做到,前提是要掌握列表解析的知识。列表解析功能是在Python2.0加入的,列表解析允许在for循环语句中使用表达式对列表成员进行迭代操作。列表解析的语法如下:[exprforiter_varinlistifcond_expr]列表解析语法的核心是for循环语句,其中expr是条件表达式,该表达式用于list的每个成员,最后的结果值是该表达式产生的列表,iter_var是迭代变量,指向list的成员,cond_expr是条件表达式,该条件表达式会过滤或捕获满足条件的list成员,cond_expr不是必须的。了解了列表解析的语法,我们就可以使用列表解析用一条语句来实现上面案例的功能。上面的代码实现了同样的功能,但相对简化多了。在上面的代码中,有读者可能会感到奇怪,传入range函数的参数为什么是而不是呢,因为在生成的整数序列中,不包含结束值。2、使用条件表达式过滤列表成员假如上面案例的需求有所变动,要求创建一个存储以内偶数的Python列表,用列表解析该如何处理呢?可以使用cond_expr条件表达式来满足创建要求。列表解析允许在for循环语句的后面添加一个条件表达式,使用该条件表达式可以过滤不满足条件的列表成员。在上面的代码中,添加了判断num是否是偶数的条件表达式,该条件表达式对num进行除2取余操作,并判断结果是否为0,若为0则该数值被添加到列表中,否则该数值被过滤掉。代码输出结果如下图所示,由于输出到,截图并不完整。3、用表达式初始化列表成员现在案例需求又有所变动(程序员最害怕的就是需求变动,因为又要熬夜写代码了),要求创建一个存储以内偶数且是3的倍数的Python列表。上面的代码利用range函数产生0至32的数字序列,for循环语句前面num与3相乘的表达式让list的成员都是3的倍数,for循环语句后面的条件表达式过滤了数值序列中的奇数。代码输出结果如下图所示。上面的代码创建了numlist列表,现在要求在nunlist的基础上,修改numlist的成员,将numlist的每个成员扩大2倍,并过滤掉能够被5整除的数值。在原有列表的基础上创建一个新的列表,可以将原有列表的名称放在for循环语句的in关键字后面,循环语句将会迭代原有列表的成员,并将符合条件表达式的成员经过for循环语句前面的表达式运算后,添加到新创建的列表中。代码输出结果如下图所示。4、使用Python列表解析功能操作矩阵矩阵是由行和列组成的数据结构,通过行下标和列下标可以确定矩阵的一个节点。例如围棋棋盘是由19条横线和19条纵线组成,形成个节点。再如,学校教室课桌的安排也是多行多列的数据结构,课桌的位置由课桌所在的行数和课桌所在的列数确定。矩阵数据结构在计算机中是用二维数组表示的,在Python语言中可以使用嵌套的列表来实现。下面的代码创建一个3行5列的矩阵。列表解析可以有多个for循环语句,每个for循环语句对应一个表达式,也允许列表嵌套。输出结果如下图所示。需要注意的是,列表解析不仅仅用于列表,也用于其它序列对象。
1
查看完整版本: 使用Python列表解析功能简化列表操作