这是任务:


  制作一个函数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/

10-10 14:10
查看更多