【问题标题】:How to make a python function that works as 'mapcar' of lisp如何制作一个用作 lisp 的“mapcar”的 python 函数
【发布时间】:2019-05-04 16:16:36
【问题描述】:

我想知道如何制作一个与 lisp 的 mapcar 相同的 python 函数。

来自mapcar lisp documentation

mapcar 对列表的连续元素进行操作。功能是 应用于每个列表的第一个元素,然后应用于第二个元素 每个列表,依此类推。当最短时迭代终止 列表用完,其他列表中多余的元素将被忽略。这 mapcar 返回的值是连续调用的结果列表 发挥作用。

例如,

list1 = [1, 2, 3, 4, 5]
list2 = [5, 4, 3, 2, 1]

def sum(firstNumber, secondNumber):
    return firstNumber + secondNumber

sumOfLists = mapcar(sum, list1, list2)

print(sumOfLists)
# [6, 6, 6, 6, 6]

【问题讨论】:

    标签: python functional-programming lisp


    【解决方案1】:

    使用map,还有一个运算符用于添加operator.add

    >>> import operator
    >>> list(map(operator.add, list1, list2))
    [6, 6, 6, 6, 6]
    

    来自documentationmap 将函数作为第一个参数,以及可变数量的 iterable 参数。关键是该函数应采用与map 相同的可迭代参数。这是唯一需要考虑的“限制”。所以,例如:

    map(lambda x: x+1,         range(10))
    map(lambda x, y: x+y,      range(10), range(10))
    map(lambda x, y, z: x+y+z, range(10), range(10), range(10))
    

    等等……

    它还可以采用用户定义的任何其他功能:

    def checkString(s):
        return isinstance(s, str) and len(s) > 10
    
    >>> list(map(checkString, ["foo", "fooooooooooooooooooooo"]))
    [False, True]
    

    【讨论】:

    • 感谢您的回答,但我该怎么做,例如,某些地图车用于检查列表元素是否为字符串的函数?或暗示不使用基本操作的另一种用途。只是为了确定如何使用 mapcar 这样的地图功能。
    • @Javierdds,我刚刚扩展了答案
    【解决方案2】:

    可以这样实现:sumOfLists = map(sum, zip(list1, list2)) 您也不需要定义 sum 函数,因为它是内置的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2011-04-11
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多