2012-12-02 37 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']