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篇 列表推导式的主要内容,如果未能解决你的问题,请参考以下文章