在不需要返回值时使用map

3 投票
2 回答
1260 浏览
提问于 2025-04-17 11:57

我有一堆对象的列表,我想把这些对象的某个属性的值都改成一样的(新值-NewValue)。

在这种情况下,使用map()比普通的for循环更有效吗?这里的函数(也就是lambda)不返回任何值。

map ( lambda x: x.attribute = NewValue, li)

对比一下

for i in li:
    i.attribute = NewValue

2 个回答

0

你的方法行不通。在lambda这个结构里,不能给一个值赋值。

5

在一个 lambda 表达式里你不能进行赋值,但 lambda 其实就是一个函数的简写,所以你可以这样做:

def set_it(x):
    x.attribute = new_value
map(set_it, li)

和下面这个明显的写法相比:

for x in li:
    x.attribute = new_value

关于 mapfor 循环(无论是列表推导式还是完整写法)有一个简单的经验法则:如果 map 不调用用 Python 写的函数,它可能会更快。但如果调用了 Python 函数,map 可能会更慢。所以在这种情况下,你可以预期 map 会比较慢。此外,普通的 for 循环不会创建并丢弃一个不需要的中间列表,因此可以预期 map 的表现会更差。

撰写回答