当前位置: 首页 > 后端技术 > Python

Python列表理解

时间:2023-03-25 20:03:14 Python

Pythonlistcomprehension列表理解是Python构建列表(list)的捷径,你可以用简洁的代码创建列表。1.range()函数python的range()函数可以用来创建一个整数列表,一般用在for循环中。range()语法:range(start,stop[,step])start:从start开始计数,默认从0开始(闭区间),如:range(5)等同于range(0,5).stop:计数到停止结束,但不包括停止(开放间隔)。例如:range(0,5)为[0,1,2,3,4],不包括5.step:步长,相邻两个值的差值,默认为1。例如:range(0,5)等同于范围(0,5,1)。为什么列表推导前要说range(),因为列表推导是通过一个可迭代对象生成一个列表。range()可以说是列表推导中最常用的可迭代对象。对于列表理解,range()是本质之一。如果没有range(),列表理解的可读性和简单性将大大降低。二、列表理解列表理解(listcomprehension)是指循环创建列表。for循环的应用场景非常广泛,也可以用来创建列表。列表推导相当于for循环创建列表的简化版本。#forlooplist_a=list()forainrange(5):list_a.append(a)print(list_a)#列表推导list_b=[bforbinrange(5)]print(list_b)以上代码为使用for循环和列表理解创建列表。list_a和list_b的结果是一样的,都是[0,1,2,3,4]。下面我们看一下复杂点的列表推导:#in后面是其他可迭代对象,比如stringlist_c=[7*cforcin"python"]print(list_c)#list推导withifconditionalstatementlist_d=[dfordinrange(6)ifd%2!=0]print(list_d)#多个for循环list_e=[(e,f*f)foreinrange(3)forfinrange(5,15,5)]打印(列表t_e)#嵌套列表理解,多个并行条件list_g=[[xforxinrange(g-3,g)]forginrange(22)ifg%3==0andg!=0]Print(list_g)结果:['ppppppp','yyyyyyy','tttttt','hhhhhhh','ooooooo','nnnnnnn'][1,3,5][(0,25),(0,100),(1,25),(1,100),(2,25),(2,100)][[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]]代码解释:1.列表推导会遍历下面的可迭代对象,然后根据for之前的表达式以生成最终列表。2、如果有if条件语句,则在for遍历后立即进行条件判断。3.如果有多个for循环,最终的数据量是循环的笛卡尔积的倍数。4.可以嵌套列表推导,这和嵌套for循环的原理是一样的。3.代码可读性对于不熟悉列表推导的人,可以用for循环实现同样的功能,但是需要几行代码,而列表推导只需要一行代码。很多人会说代码简洁了但是可读性降低了,其实不然,代码的功能一目了然,但是for循环的代码基本不可能一眼看懂。尤其是当创建列表的for循环嵌套在业务逻辑中的其他for循环中时,恰恰是列表推导式的使用,能够使可读性最高。同时,在Python3中,listcomprehension有自己的localscope,就像函数一样。表达式内部的变量和赋值只在局部起作用,表达式上下文中的同名变量也可以正常引用,局部变量不会对其产生影响。也就是说,列表推导不会有变量泄漏的问题,列表推导中的赋值操作不能影响列表推导上下文中的同名变量。当然,并不是所有场景都推荐使用列表推导式。比如:如果listcomprehension的代码超过两行,就要考虑改用for循环。超过两行的列表理解真的不可读。通常的原则是只使用列表理解来创建一个新的列表,并且尽可能的简短。字典推导(稍后我们会看到集合推导)。如果你已经熟悉列表推导的概念,接受字典推导并不困难。直接看代码:#因为key是唯一的,所以最终的value是1dict_a={key:valueforkeyin'python'forvalueinrange(2)}print(dict_a)#可以根据key构造valuedict_b={key:key*keyforkeyinrange(6)}print(dict_b)#遍历一个有键值关系的可迭代对象list_phone=[('HUAWEI','Huawei'),('MI','Xiaomi'),('OPPO','OPPO'),('VIVO','VIVO')]dict_c={key:valueforkey,valueinlist_phone}print(dict_c)result:{'p':1,'y':1,'t':1,'h':1,'o':1,'n':1}{0:0,1:1,2:4,3:9,4:16,5:25}{'HUAWEI':'Huawei','MI':'小米','OPPO':'OPPO','VIVO':'VIVO'}5.集合推导Python2.7不仅带来了字典推导,还亦设推导。同样,我们直接看代码,所以可以直观的看到集合推导公式。#遍历一个可迭代对象生成一个集合set_a={valueforvaluein'有些人冷静,有些人负重前行'}print(set_a)runningresults:{'negative','have','person','light','front','cloud','heavy',',','light','wind','row'}集合是无序不重复的,所以会自动去除重复的元素,并且每次运行的显示顺序都不同。从上面的代码可以得出集合推导是将列表推导的[]换成{},字典推导是推导两个值并构造成键值对。另外,无论是字典推导还是集合推导,都可以跟列表推导一样,后面跟if条件语句、嵌套循环等,根据自己的需要使用。————————————————版权声明:本文为CSDN博主“Python碎片”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和这个声明。