2013-05-30 55 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

在純函數式編程中,您從不使用任務。那麼,最壞的情況是一次性分配,但不能像這個例子那樣突變值。 –

相關問題