MEMOO
MEMOO
Published on 2025-04-18 / 3 Visits
0
0

Python列表推导式

摘要:在本节中,你将了解Python列表推导式,它允许你基于一个现有的列表创建一个新列表。

Python列表推导式简介

在编程中,你常常需要对一个 列表 中的元素进行转换,并返回一个新的列表。

例如,假设你有一个包含五个数字的列表,如下所示:

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

并且你想基于这个数字列表得到一个包含各个数字平方的列表。

最直接的方法是使for循环

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

squares = []

for number in numbers:

    squares.append(number**2)

print(squares)

输出:

[1, 4, 9, 16, 25]

在这个例子中for循环遍numbers列表中的元素,对每个数字求平方,然后将结果添加squares列表中。

请注意,一个平方数是该数字自身相乘的结果。例如,数字2的平方是2×2 = 4,数字3的平方是3×3 = 9,依此类推。

为了使代码更加简洁,你可以将内置map()函数与一个 Lambda表达式 结合使用:

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

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

print(squares)

输出:

[1, 4, 9, 16, 25]

map()函数返回一个迭代器,所以你需要使list()函数将该迭代器转换为列表。

for循环map()函数都能帮助你基于一个现有的列表创建一个新列表。但代码实际上并不够简洁优美。

为了帮助你基于对现有列表中元素的转换来创建一个列表,Python提供了一个名为列表推导式的特性。

以下展示了如何使用列表推导式numbers列表中创建一个平方数列表:

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

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

print(squares)

输出:

[1, 4, 9, 16, 25]

下面是列表推导式的部分内容:

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

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

  • 一个输入列表numbers

  • 一个表示列表元素的变量number

  • 一个输出表达式number**2),它根据输入列表的元素返回输出列表的元素。

以下展示了Python列表推导式的基本语法:

[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 循环,或者像这样使用带lambda表达式 filter() 函数:

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列表推导式提供了一个可选的判断条件,使你能够为要包含在新列表中的列表元素指定一个条件:

[output_expression for element in list if condition]

这种列表推导式使你能够用一lambda表达式来替filter()函数。

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()函数,能让你的代码更加简洁易读。


Comment