【问题标题】:Combining map with zip through lambda通过 lambda 将 map 与 zip 结合起来
【发布时间】:2018-06-01 01:30:25
【问题描述】:

我正在尝试编写一个添加二维向量的函数。 我正在尝试组合 map() 函数,使用 zip() 函数(将压缩 2 个元组)获取列表。

这是代码:

a = (1, 2)
b = (3, 4)
c = list(map(lambda x, y: x+y, list(zip(a, b))))
print(c)

所以在我看来,zip(a, b) 返回一个包含以下元组的 zip 对象:(1, 3), (2, 4)。然后将其转换为列表。我收到以下错误:

TypeError: () 缺少 1 个必需的位置参数:'y'

所以我的猜测是 lambda 函数没有在每个元组中取第二个数字。

有没有办法做到这一点?

【问题讨论】:

    标签: python


    【解决方案1】:

    lambda只有一个参数,比如:

    c = list(map(lambda x: sum(x), zip(a, b)))
    

    但是一旦我们使用 sum,我们可以像这样直接映射它:

    c = list(map(sum, zip(a, b)))
    

    测试代码:

    a = (1, 2)
    b = (3, 4)
    c = list(map(sum, zip(a, b)))
    print(c)
    

    结果:

    [4, 6]
    

    【讨论】:

    • @abdul_niyas_pm:我想这是因为作者使用 Python 3,其中map 返回一个生成器(就像 python 2 的 itertools.imap)。
    【解决方案2】:

    在 Python2 中,您可以在 lambda 中使用特定的解包语法:

    a = (1, 2)
    b = (3, 4)
    c = list(map(lambda (x, y): x+y, list(zip(a, b))))
    

    但是,在 Python3 中,您必须使用 sum

    c = list(map(lambda x_y: sum(x_y), list(zip(a, b))))
    

    【讨论】:

    • 因此,如果我想执行一些其他计算(对于 lambda 来说足够短,但没有 sum 等内部函数),我必须使用 touple 索引或传递map() 的外部函数?
    • @fishamit sum 是 Python 中的内置函数。它将始终通过实现可用。但是,根据您的 Python 版本,您可以使用元组解包方法、预定义函数(例如 sum)或 lambda
    【解决方案3】:

    zip 返回一个元组,所以你可以像这个例子一样求和:

    list(map(lambda x: x[0] + x[1], zip(a, b)))
    

    输出:

    [4, 6]
    

    【讨论】:

      【解决方案4】:

      lambda接收一个参数,这是zip返回的二元组。

      • 您可以按元素访问它:lambda pair: pair[0] + pair[1]
      • 您可以申请sum()
      • 在 Python 2 中,您可以直接在签名中解压缩它:lambda (x, y): x + y

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2021-09-28
        相关资源
        最近更新 更多