如何制作可作为Lisp的“ mapcar”使用的python函数

时间:2018-12-03 11:10:27

标签: python functional-programming lisp

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

来自mapcar lisp documentation

  

mapcar对列表的连续元素进行操作。功能是   应用于每个列表的第一个元素,然后应用于第二个元素   每个列表,等等。迭代在最短时终止   list用完,其他列表中的多余元素将被忽略。的   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]

2 个答案:

答案 0 :(得分:3)

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

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

来自documentationmap将函数作为第一个参数,并将可变数量的可迭代参数作为参数。关键在于该函数应采用与给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]

答案 1 :(得分:1)

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