首先上为什么要用list解析式的原因:
1.使用list解析式,代码可读性更好(可能作者认为代码越短可读性越好吧)
2.使用list解析式可以减少代码量
3.相比于标准for循环,使用list解析式使得程序运行的更快
对于从一个已存在的list中创建一个新的list,使用list解析式无疑是很方便的一种代码形式。
首先什么是list解析式怎么实现:
假设现在有一个list,我们暂且将其命名为list_animals,作为存储动物园里所有动物的list,现在兽医想从list_animals中挑选一些animal进行体检。为了达到这个目的,我们可以使用标准的for循环:
#构建存储动物园所有动物的list:list_animals
List_animals=['Rabbit','Rabbit','Rabbit','Rabbit','Cat','Cat','Cat','Cat','Cat','Cat','Cat',‘Turtle’,’Turtle','Turtle','Turtle','Turtle','Turtle','Turtle','Dog','Dog','Kangaroo','Kangaroo','Kangaroo','Kangaroo','Kangaroo','Kangaroo']
#构建存储需要体检的动物的list:list_animals_check
List_animals_check=[]
For animal in list_animals:
List_animals_check.append(animal)
代码很简单,首先我们创建存储动物园中所有动物的list_animals,然后我们创建存储需要体检的动物的list_animals_check,最后我们逐个遍历list_animals,找到需要体检的动物,并将其添加到list_animals_check
现在我们利用list解析式重新实现这个逻辑:
List_animals_check=[animal for animal in list_animals]
相比于使用标准for 循环里的三行代码,使用list解析式式只需要一行代码。
下面我们看一下,再加一个限制条件,两种形式代码之间的区别:
假设兽医只需要给除狗和兔子之外的小动物做体检,
使用标准for循环的代码如下:
List_animals_check=[]
For animal in list_animals:
If(animal != ‘dog’ and animal !=’rabbit’):
List_animals_check.append(animal)
使用list解析式的代码如下:
List_animals_check=[animal for animal in list_animals if animal !=’dog’ and animal !=’rabbit’ ]
结果显而易见,标准for 循环形式四行代码,而使用list解析式依然只需要一行代码
相比于标准for 循环形式的代码,list解析式代码不仅代码量小而且执行速度也更快:
从上面的执行时间来看,使用list解析式比标准for循环节省了约51%的时间。
此外不仅list可以使用解析式,集合也可以使用解析式,字典也可以使用解析式,具体可以参考链接二。
参考:https://towardsdatascience.com/python-list-comprehension-in-3-minutes-and-3-reasons-why-you-should-use-it-bf398654caf9towardsdatascience.com轻松学会Python列表解析式 - 精品 IT 资源分享codingpy.com
致谢:
北邮爱可可-爱生活老师