Python程序设计教程(第2版)
上QQ阅读APP看书,第一时间看更新

4.5.1 列表推导式

列表推导式(list comprehension)是Python开发时用得最多的技术之一,表示对可迭代(Iterable)对象的元素进行遍历、过滤或再次计算,生成满足条件的新列表。它的结构是在一个中括号里包含一个函数或表达式(再次计算),接着是一个for语句(遍历),然后是0个或多个for(遍历)或者if语句(过滤),在逻辑上等价于循环语句,但是形式上更简洁。

语法形式:

1. 列表推导式和循环语句for

如果要将一个数字列表中的元素均扩大2倍组成新列表,利用循环语句,我们可以这样做:

而利用列表推导式,我们可以这样做:

不难看出,利用列表推导式更加简洁。由于Python内部对列表推导式做了大量优化,还能保证较快的运行速度。

当然,for循环可以嵌套。列表推导式中也可以有多个for语句。

如果要将一个一层嵌套数字列表中的元素展开后扩大2倍组成新列表,利用循环嵌套语句,我们可以这样做:

利用列表推导式,我们可以这样做:

2. 列表推导式和条件语句if

在列表推导式中,条件语句if对可迭代(Iterable)对象中的元素进行筛选,起到过滤的作用。

接着上面的例子,如果是将一个数字列表中的是正数的元素扩大2倍组成新列表,利用列表推导式,我们可以这样做:

另外,在列表推导式中还可以使用if-else语句。

将一个数字列表中的正偶数扩大2倍、正奇数扩大3倍组成新列表,利用列表推导式,我们可以这样做:

【例4-10】 现有一产品1~31日的销售量如下:

请找出最大销量以及销售日输出。请用列表推导式完成。

程序代码:

程序运行结果:

3. 列表推导式和函数function

在列表推导式中可以使用函数function。

利用列表推导式快速生成包含15个30~80(包含30、80)之间的随机整数列表rlist。

对rlist中的元素,如果被3整除则该数除以3,如果被7整除则该数扩大2倍,其他的数扩大5倍,这些数组成新列表number。

4. 同时遍历多个列表或可迭代对象

有两个成绩列表score1和score2,将score1中分数为90及以上和score2中分数为85及以下的元素两两分别组成元组,将这些元组组成列表nn中的元素。