2013-05-30 56 views
2

是非法的使用地图功能分配,如什么是在python中使用赋值映射函数的好替代方法?

map(lambda in: test[in]+=value[in], somelist) 

那么,什么是它的一个很好的选择。你可以使用for循环来做到这一点,但在我看来,当面对大规模时,for循环解决方案非常缓慢,有没有更好的方法?

+3

一个'for'循环不会*比* map()慢得多*或者等价的理解(这两个都不应该用于副作用,因为这是你在这里试图做的)。地狱,带'lambda'的'map()'可能会比普通的'for'循环慢。 –

+4

你怎么知道一个循环很慢,为什么地图会更快,你有一个有效的例子吗? –

+0

@JoshLee我实际上不确定地图会比循环更快,但我做了实验来比较C和Python中的循环,发现Python的for循环非常慢,所以我认为应该有一些方法来优化它。 .. – chentingpc

回答

5

利用这一点,它的首选:

for i in somelist: 
    test[i] += value[i] 

不管怎样,你的例子是好的情况下使用map。当您想要创建一个新列表作为结果时,您使用map甚至更​​好,列出解析。在这种情况下,正在对每个项目执行分配,因此在这里创建新列表毫无意义!

+1

+1。这是最好的,最清晰的,这种事情的一般解决方案。 –

+0

这是不是一个糟糕的情况,因为在'map'&'reduce'内部进行赋值违背了它们的函数编程特性?或者我没有得到函数式编程(可能)。 –

+0

在纯函数式编程中,您从不使用任务。那么,最坏的情况是一次性分配,但不能像这个例子那样突变值。 –

相关问题