找回密码
 会员注册
查看: 29|回复: 0

Python——列表(list)推导式

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
70601
发表于 2024-9-5 18:50:44 | 显示全部楼层 |阅读模式
本文基于python3。目录1、Python推导式2、列表(list)推导式2.1、定义2.2、实际操作2.2.1、一个表达式,后面为一个for子句2.2.2、一个表达式,后面为一个for子句,然后,跟着if子句。2.2.3、一个表达式,后面为一个for子句,然后,跟着for子句。2.2.4、一个表达式,后面为一个for子句,然后,跟着for子句,if语句2.2.5、表达式的不同2.2.5.1、表达式是函数2.2.5.2、表达式是元组2.2.5.2、表达式是复杂的表达式和嵌套函数3、利用列表推导式实现乘法口诀4、总结1、Python推导式你可以理解成一种数据的处理方式。目的是为了构建一个新的数据序列。Python支持各种数据结构的推导式:列表(list)推导式字典(dict)推导式集合(set)推导式元组(tuple)推导式各自从字面意思就知道,创建一个列表、字典、集合、元组。我们本文只看列表(list)推导式。2、列表(list)推导式列表推导式创建列表的方式更简洁。常见的用法:对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。用满足特定条件的元素创建子序列。2.1、定义定义主要有两种:(该部分定义来自:菜鸟教程)定义1:[表达式for变量in列表][out_exp_resforout_expininput_list]12定义2[表达式for变量in列表if条件][out_exp_resforout_expininput_listifcondition]12out_exp_res:列表生成元素表达式,可以是有返回值的函数。forout_expininput_list:迭代input_list将out_exp传入到out_exp_res表达式中。ifcondition:条件语句,可以过滤列表中不符合条件的值。总结:一个表达式,后面为一个for子句,然后跟着零个或多个for或if子句。结果是由表达式依据for和if子句求值计算而得出一个新列表。基于总结话我们来实际操作一下。2.2、实际操作2.2.1、一个表达式,后面为一个for子句创建数值*2的列表:TestList=[x*2forxinrange(10)]print(TestList)#[0,2,4,6,8,10,12,14,16,18]1234'运行运行等价于以下语句:TestList=[]forxinrange(10):TestList.append(x*2)print(TestList)12345'运行运行2.2.2、一个表达式,后面为一个for子句,然后,跟着if子句。创建全是偶数的列表:TestList=[iforiinrange(10)ifi%2==0]print(TestList)#[0,2,4,6,8]1234'运行运行等价于以下语句:TestList=[]foriinrange(10):ifi%2==0:TestList.append(i)print(TestList)123456'运行运行2.2.3、一个表达式,后面为一个for子句,然后,跟着for子句。直接上实例,一看就懂:OldList=[[1,2,3],[4,5,6],[7,8,9]]TestList=[jforiinOldListforjini]print(TestList)#[1,2,3,4,5,6,7,8,9]123456'运行运行等价于以下语句:OldList=[[1,2,3],[4,5,6],[7,8,9]]TestList=[]foriinOldList:forjini:TestList.append(j)print(TestList)#[1,2,3,4,5,6,7,8,9]123456789'运行运行2.2.4、一个表达式,后面为一个for子句,然后,跟着for子句,if语句直接上实例:OldList=[[1,2,3],[4,5,6],[7,8,9]]TestList=[jforiinOldListforjiniifj%2==0]print(TestList)#[2,4,6,8]123456'运行运行等价于以下语句:OldList=[[1,2,3],[4,5,6],[7,8,9]]TestList=[]foriinOldList:forjini:ifj%2==0:TestList.append(j)print(TestList)#[2,4,6,8]12345678910'运行运行2.2.5、表达式的不同因为列表生成元素表达式,可以是有返回值的函数。因此就有一些其他用法。2.2.5.1、表达式是函数OldList=['AA','BB','CC']TestList=[i.strip()foriinOldList]#strip():去掉前后空格print(TestList)#['AA','BB','CC']123456'运行运行2.2.5.2、表达式是元组TestList=[(x,x**2)forxinrange(6)]print(TestList)#[(0,0),(1,1),(2,4),(3,9),(4,16),(5,25)]1234'运行运行注意:使用元组必须带小括号。#没带小括号TestList=[x,x**2forxinrange(6)]print(TestList)#错误信息/Scripts/python.exed:/05.ProjectWork/00.Python/00.Project/test_python/test.pyFile"d:/05.ProjectWork/00.Python/00.Project/test_python/test.py",line192TestList=[x,x**2forxinrange(6)]^SyntaxError:invalidsyntax123456789102.2.5.2、表达式是复杂的表达式和嵌套函数frommathimportpiTestList=[str(round(pi,i))foriinrange(1,9)]print(TestList)#['3.1','3.14','3.142','3.1416','3.14159','3.141593','3.1415927','3.14159265']12345'运行运行3、利用列表推导式实现乘法口诀直接上代码:print("\n".join(["".join(["{}*{}={}".format(x,y,x*y)forxinrange(1,y+1)])foryinrange(1,10)]))1'运行运行结果如下:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=811234567894、总结其实我们看这些实例,他们的规律就是:最前面的表达式就是最后这个值做了怎么样的处理。后面的for、if语句,从左到右依次,一层一层嵌套进去,进行处理。如果有问题,请指出,或者copy了谁的,也请指出。会及时更正。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 12:16 , Processed in 1.094167 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表