这是任务:
制作一个函数my_map_k
作为参数接受函数f和k
列出L1,...,Lk,任意k≥1,并返回列表
[f(L1 [0],...,Lk [0]),...,f(L1 [n-1],...,Lk [n-1])],其中n是长度
李列表中最短的。
暗示。使用Python的*
表示法处理任意数量的列表作为参数。
例:
my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])
应该返回
[6, 28]
。这是我所走的路,但是我被卡住了。
def my_map_k(f, *L):
n = len(min(*L, key=len))
x=0
while x < n:
return [f(*L[x],) for x in L]
my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])
问题是,我不能只说有3个列表,因为可能还有更多。此外,我看不到如何从所有三个列表中删除第一个元素。
最佳答案
您可以使用zip()
依次从每个列表中获取第n个元素,并使用list comprehension调用生成的每组参数的提供的函数:
def my_map_k(f, *lists):
return [f(*args) for args in zip(*lists)]
它在起作用:
>>> my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])
[6, 28]
关于python - 如何在不使用内置 map 或星图的情况下编写类似星图的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55063613/