前言

在Python语言中,所谓的列表生成式,顾名思义,就是说可以生成list列表的表达式,是Python内置的一种强大的功能。列表生成式的英文含义为List Comprehensions。关于列表生成式的概念及特点,我在之前的视频中有过讲解,在此呢就不再多做叙述,只是做个简短回顾。本文主要讲解的是列表生成式的一个应用案例。

列表生成式

列表生成式作用是用来生成列表的,那么其特点也肯定是使用“[]”来去表示的。

需求1:生成一个列表,元素内容是1到20

1、不使用列表生成式

python生成大于1024位的数字 python生成大写字母列表_字符串

使用range函数+for循环完成此功能,非常容易理解,也比较好实现。

2、使用列表生成式

python生成大于1024位的数字 python生成大写字母列表_python生成列表_02

和第一种方式对比,可以发现使用列表生成式实现功能只需要一行代码就可以搞定了,非常的简单。

需求2:给定一个list集合,将集合中的字符串元素全部变为大写

1、不使用列表生成式

python生成大于1024位的数字 python生成大写字母列表_字符串_03

2、使用列表生成式

python生成大于1024位的数字 python生成大写字母列表_列表生成式_04

可以发现使用列表生成式实现此功能,非常简单。但是要特别注意的是,上面的实现方式是有问题的,这个问题也是我们经常容易犯的问题,上面的程序的运行结果虽然可以实现对list元素中的字符串内容全部变为大写,但是这个时候和我们的题意稍微有点不符,程序的运行结果会把列表中元素为90的这个元素给抛弃了,也就是说90这个元素不在生成的列表之内。

原因:列表生成式的执行过程理解不够,以上图为例,首先执行for循环,迭代list集合中的元素,然后继续if判断,如果元素是字符串,则执行ele.upper(),将字符串大写作为新生成的列表的元素,否则就不执行操作。很显然,90不是一个字符串,自然就舍弃了。

正确做法:

python生成大于1024位的数字 python生成大写字母列表_for循环_05

只需要把if判断条件放置到for循环之前就好了。

总结

使用列表生成式实现生成一个list列表非常的简单,实现的代码也非常的优雅。但是是不是说列表生成式就没有缺点呢?显然也不是那么绝对的,因为这个列表生成式生成列表的时候是一下子就把列表生成好了,大家可以思考一个问题,就是:如果我要生成的列表足够的大,但是我却又用不到列表中的所有元素,这样一方面对内存的占有空间明显加大,而且也显的多余,这样显然是不够好的,您说呢?至于如何解决这种问题,python同样提供了另一种方案,就是生成器,我们下篇来讲。