【问题标题】:Unpacking the arguments before feeding it to a `map` function [duplicate]在将参数提供给`map`函数之前解包参数[重复]
【发布时间】:2020-09-02 22:37:09
【问题描述】:
>>> d = {'a': 1, 'b': 2}
>>> list(map(lambda x: x[0] * x[1], d.items()))
['a', 'bb']

我宁愿能够在我的函数中命名我的变量,但是 这个

>>> list(map(lambda k, v: k * v, d.items()))
TypeError: <lambda>() missing 1 required positional argument: 'v'

显然不会工作,因为 map 将单个输入提供给函数。

我为自己做的是写一个装饰器(这里是简化的);

def asterisk(func):
    def _func(single_input):
        return func(*single_input)
    return _func

然后我就可以这样做了

>>> list(map(asterisk(lambda k, v: k * v), d.items()))
['a', 'bb']

但我不禁认为我在这里遗漏了一个简单的技巧或内置函数。

【问题讨论】:

  • list(itertools.starmap(operator.mul, d.items()))
  • 为什么不直接list(k * v for k, v in d.items())
  • @Rfroes87 大概是因为这是一个微不足道的例子,并且将map 与给定的回调函数一起使用仍然有用……

标签: python


【解决方案1】:

您可以将generator expression 用于list,如下所示:

list(k * v for k, v in d.items())

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 2012-09-28
    • 2022-09-30
    • 2022-01-26
    • 1970-01-01
    • 2021-11-29
    • 2012-11-13
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多