为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不使用内置地图或星图的情况下编写类似星图的函数?

如何在不使用内置地图或星图的情况下编写类似星图的函数?

Helenr 2021-11-30 15:53:13
这是任务:创建一个函数my_map_k,该函数采用函数 f 和 k 列出 L 1 ,...,L k,对于任意 k ≥ 1,并返回列表 [f(L 1 [0],...,L k [ 0]),...,F(L 1 [N-1],...,L ķ [N-1])],其中n是最短的长度L我列表。暗示。使用 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 个列表,因为可能还有更多。此外,我看不到如何从所有三个列表中取出第一个元素。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您可以使用依次从每个列表中zip()获取第n个元素,以及一个列表推导式,以使用如此生成的每组参数调用提供的函数:

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]


查看完整回答
反对 回复 2021-11-30
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我想到了:


def my_map_k(f, *L):

    z = zip(*L)

    l = list(z)

    return ([f(*x) for x in l])


my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])


查看完整回答
反对 回复 2021-11-30
?
月关宝盒

TA贡献1772条经验 获得超5个赞

没有辅助函数的解决方案:


from operator import add


def my_map_k(f, *L):

    ind = 0

    while True:

        try:

            yield f(*[l[ind] for l in L])

        except IndexError:

            break

        else:

            ind += 1


result = my_map_k(add, range(5), range(5))

print(list(result))

# [0, 2, 4, 6, 8]


查看完整回答
反对 回复 2021-11-30
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信