摘要:在本节中,你将了解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()
函数,能让你的代码更加简洁易读。