摘要:在本节中,你将学习如何使用 Python 的 map()
函数与列表一起工作。
map()
函数简介
当处理 列表(或元组)时,你经常需要转换列表中的元素,并返回一个包含转换后元素的新列表。
假设,你想要将以下 bonuses
列表中的每个数字加倍:
bonuses = [100, 200, 300]
为了实现这一点,你可以使用 for
循环来遍历元素,将每个元素加倍,并将其添加到一个新列表中,如下所示:
bonuses = [100, 200, 300]
new_bonuses = []
for bonus in bonuses:
new_bonuses.append(bonus*2)
print(new_bonuses)
输出:
[200, 400, 600]
Python 提供了一种更优雅的方式,通过使用内置的 map()
函数来完成这类任务。
map()
函数会遍历列表(或元组)中的所有元素,对每个元素应用一个函数,并返回一个包含新元素的新迭代器。
以下是 map()
函数的基本语法:
iterator = map(fn, list)
在这个语法中fn
是将应用于列表中每个元素的函数的名称。
实际上,你可以将任何 可迭代对象 传递给 map()
函数,而不仅仅是列表或元组。
回到前面的例子,为了使用 map()
函数,你首先定义一个将奖金加倍的函数,然后使用 map()
函数,如下所示:
def double(bonus):
return bonus * 2
bonuses = [100, 200, 300]
iterator = map(double, bonuses)
或者,你可以使用 Lambda 表达式 使代码更简洁,如下所示:
bonuses = [100, 200, 300]
iterator = map(lambda bonus: bonus*2, bonuses)
一旦你有了迭代器,你可以使用 for
循环遍历新元素。
或者,你可以使用 list()
函数将迭代器转换为列表:
bonuses = [100, 200, 300]
iterator = map(lambda bonus: bonus*2, bonuses)
print(list(iterator))
map()
函数处理字符串列表
以下示例使用 map()
函数返回一个新列表,其中每个元素都被转换为首字母大写的形式:
names = ['david', 'peter', 'jenifer']
new_names = map(lambda name: name.capitalize(), names)
print(list(new_names))
输出:
['David', 'Peter', 'Jenifer']
map()
函数处理元组
假设你有以下购物车数据,表示为一个包含元组的列表:
carts = [['SmartPhone', 400],
['Tablet', 450],
['Laptop', 700]]
并且你需要计算每个产品的税额,税率为10%。此外,你需要将税额添加到列表中每个项目的第三个元素位置。
返回的列表应该类似于以下形式:
[['SmartPhone', 400, 40.0],
['Tablet', 450, 45.0],
['Laptop', 700, 70.0]]
为了实现这一点,你可以使用 map()
函数为列表创建新元素,并将新的税额添加到每个项目中,如下所示:
carts = [['SmartPhone', 400],
['Tablet', 450],
['Laptop', 700]]
TAX = 0.1
carts = map(lambda item: [item[0], item[1], item[1] * TAX], carts)
print(list(carts))
输出:
[['SmartPhone', 400, 40.0], ['Tablet', 450, 45.0], ['Laptop', 700, 70.0]]
总结
使用 Python 的
map()
函数对列表中的每个项调用一个函数,并返回一个迭代器。