2012-12-02 89 views
2

我執行的常見操作是將字母列表連接到單詞列表(字符串)中。相當於Python中的Lambda表達式

我通常使用列表理解:

lists_of_letters = [["m", "y"], ["d", "o", "g"], ["s", "k", "i", "p"]] 
list_of_words = ["".join(a_list_of_letters) for a_list_of_letters in lists_of_letters] 
# list_of_words == ["my", "dog", "skip"] 

或者有時候多一點功能:

list_of_words = map(lambda x: "".join(x), lists_of_letters) 

我不知道是否有寫所需的地圖功能的更好的方法調用比使用lambda表達式。我試圖學習operatorfunctools來擴展我的python函數式編程,但在這種情況下,我似乎找不到明確的方法來使用它們。

回答

5

在這種情況下,你實際上可以只說map(''.join, lists_of_letters)

In [1]: lists_of_letters = [["m", "y"], ["d", "o", "g"], ["s", "k", "i", "p"]] 
In [2]: map(''.join, lists_of_letters) 
Out[2]: ['my', 'dog', 'skip'] 

因爲''.join本身就是一個功能(在一個綁定方法空字符串),需要一個參數:

In [3]: ''.join 
Out[3]: <built-in method join of str object at 0x100258620> 

也就是說,這裏可能不會更好本身,因爲它的可讀性稍差IMO

+0

謝謝,我完全忘記了綁定方法也是頭等功能。這就是爲什麼我沒有得到任何與_partial_任何地方。 – JoshNahum

1

你不需要lambda函數在這裏:

In [26]: map("".join, lists_of_letters) 
Out[26]: ['my', 'dog', 'skip']