我一直在學習使用Map more(成爲更多功能的程序員)。它看起來像Map想要一個列表作爲應用該函數的表達式。如果表達式不是一個列表,那麼它並不開心。如何在列表中的一個條目上映射函數?
我用NumberForm在這個例子來說明我的意思:
我可以對整個名單確定地圖NumberForm:
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, data]
但是,如果我嘗試將它映射到一些特定元素名單,說在上面的第一個,這是行不通的
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, data[[1]] ]
返回未格式化的結果。與原始數據相同。即我回到'1'而不是'1.00',如在其他例子中。
來解決,我增加了額外的{}
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, {data[[1]]} ]
現在的工作,(只需要使用First
的結果中去除{}
)。
所以我想,那爲什麼不一直加這個額外的{}
並最終刪除它? 這樣,我不必擔心我的Map'ing函數是不是像上面例子那樣的列表?
所以,我的例子將全部變成這樣:
data = {1, 2, 3}
[email protected][NumberForm[#, {3, 2}] &, { data } ]
[email protected][NumberForm[#, {3, 2}] &, { data[[1]] } ]
這樣,代碼將在一切工作和我沒有,如果使用地圖前進行專項檢查什麼,我碰巧申請地圖是一個列表或不是。
問題是:上述問題是否適合專家的解決方案,還是有更好的方法來處理這個問題?
我不得不承認,我不明白你的動機是什麼,問這個問題。爲什麼你會嘗試將Map映射到不是列表的東西? – 2011-12-23 07:56:05
@David Zaslavsky一個人可能最終想要將Map映射到不同於列表的其他東西上,但這種情況非常少見,而且在與此問題討論的情況不同的情況下完成。一個典型的例子就像'Map [f,myContainerA [myContainerB [1,2,3], myContainerC [4,5,6]],{2}]',儘管在這種情況下我通常使用規則。 – 2011-12-23 12:14:36
也許我誤解了你的問題,但我的方法沒有回答嗎?如果不是,你可以嘗試以不同的方式解釋你想要的嗎?在我看來,我的建議確實如你所願。 – acl 2011-12-23 12:56:52