Python入门教程第40篇 列表推导式

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第40篇 列表推导式相关的知识,希望对你有一定的参考价值。

本篇我们将会学习列表推导式(List comprehension),它可以基于已有的列表创建一个新的列表。

列表推导式简介

在编写代码时,我们经常需要对某个列表中的元素进行变换并返回一个新的列表。例如,以下是一个数字列表:

numbers = [1, 2, 3, 4, 5]

现在我们想要返回一个基于 numbers 列表元素的平方组成的列表,最直接的实现方法是使用 for 循环:

numbers = [1, 2, 3, 4, 5]

squares = []
for number in numbers:
    squares.append(number**2)

print(squares)

以上示例使用 for 循环遍历 numbers 列表,将每个元素进行平方,然后将结果追加到 squares 列表中。

为了简化以上代码,我们可以使用内置的 map() 函数和一个 lambda 表达式:

numbers = [1, 2, 3, 4, 5]

squares = list(map(lambda number: number**2, numbers))

print(squares)

由于 map() 函数的返回值是一个迭代器,我们需要使用 list() 函数将其转换为列表。

for 循环和 map() 函数都可以基于已有的列表创建一个新的列表,但是这两种方法都不够简洁美观。为此,Pyhton 提供了一个新的功能:列表推导式(list comprehension)。

以下示例使用列表推导式基于列表 numbers 创建一个新的列表:

numbers = [1, 2, 3, 4, 5]
squares = [number**2 for number in numbers]

print(squares)

以下是其中的列表推导式:

squares = [number**2 for number in numbers]

该列表推导式由以下几个部分组成:

  • 一个输入列表(numbers);
  • 一个代表列表元素的变量(number);
  • 一个输出表达式(number**2),返回输出列表的元素。

列表推导式的基本语法如下:

[output_expression for element in list]

列表推导式等价于以下代码:

output_list = []
for element in list:
    output_list.append(output_expression)

包含 if 条件的列表推导式

以下列表中包含了地球上最高的五座山:

mountains = [
    ['Makalu', 8485],
    ['Lhotse', 8516],
    ['Kanchendzonga', 8586],
    ['K2', 8611],
    ['Everest', 8848]
]

如果想要获取高度大于 8600 米的山峰列表,可以使用 for 循环或 filter() 函数加上 lambda 表达式:

mountains = [
    ['Makalu', 8485],
    ['Lhotse', 8516],
    ['Kanchendzonga', 8586],
    ['K2', 8611],
    ['Everest', 8848]
]


highest_mountains = list(filter(lambda m: m[1] > 8600, mountains))

print(highest_mountains)

输出结果如下:

[['K2', 8611], ['Everest', 8848]]

与 map() 函数类型,filter() 函数也会返回一个迭代器。因此,我们需要使用 list() 函数将迭代器转换为列表。

Python 列表推导式提供了一个可选的谓词(predicate)参数,可以指定一个条件,只有满足条件的元素才会包含在新的列表中。

[output_expression for element in list if condition]

这种形式的列表推导式可以替代 filter() 函数加 lambda 表达式:

mountains = [
    ['Makalu', 8485],
    ['Lhotse', 8516],
    ['Kanchendzonga', 8586],
    ['K2', 8611],
    ['Everest', 8848]
]

highest_mountains = [m for m in mountains if m[1] > 8600]

print(highest_mountains)

输出结果如下:

[['K2', 8611], ['Everest', 8848]]

总结

  • Python 列表推导式可以基于已有的列表创建一个新的列表。
  • 使用列表推导式替代 map() 或者 filter() 函数可以简化代码。

以上是关于Python入门教程第40篇 列表推导式的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第44篇 集合推导式

Python推导式尝试学习

Python推导式尝试学习

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式

列表推导式_Python教程

python 入门教程之每日 5 or 6 道题,列表推导式篇 | Python 技能树题库