相当于Python中的Lambda表达式

时间:2012-12-02 07:22:36

标签: python lambda functional-programming

我执行的常见操作是将字母列表列表加入单词列表(字符串)。

我通常使用列表理解:

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)

我想知道是否有更好的方法来编写map调用所需的函数而不是使用lambda表达式。我正在尝试学习operatorfunctools以扩展我的python函数式编程,但在这种情况下我似乎无法找到一种明确的方法来使用它们。

2 个答案:

答案 0 :(得分: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>

那就是说,本身可能不是更好,因为它的可读性稍差一点

答案 1 :(得分:1)

这里不需要lambda函数:

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