我想知道如何制作与lisp的mapcar
相同的python函数。
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]
答案 0 :(得分:3)
使用map
,并且还有一个用于添加operator.add
的运算符:
>>> import operator
>>> list(map(operator.add, list1, list2))
[6, 6, 6, 6, 6]
来自documentation。 map
将函数作为第一个参数,并将可变数量的可迭代参数作为参数。关键在于该函数应采用与给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
函数,因为它是内置函数。