【问题标题】:Transform items from iterable with a sequence of unary functions使用一系列一元函数从可迭代项转换项目
【发布时间】:2011-01-13 08:49:06
【问题描述】:

我经常发现自己需要将一元函数序列应用于相同长度的序列。我的第一个想法是使用map(),但是这只需要一个函数即可应用于序列中的所有项目。

例如,在下面的代码中,我希望将str.upper() 应用于每个a 中的第一项,并将int 应用于第二项。 “transform”是我想要的效果的占位符。

COLS = tuple([transform((str.upper, int), a.split(",")) for a in "pid,5 user,8 program,28 dev,10 sent,9 received,15".split()])

是否有一些标准库或其他很好的实现可以巧妙地执行这样的转换?

【问题讨论】:

  • 这个问题没有错,但我会为此挥霍并购买额外的代码行。在第 1 行拆分记录及其字段,在第 2 行完成整理。换句话说,您选择的因素不是我会选择的。

标签: python map transform predicate unary-function


【解决方案1】:
>>> s="pid,5 user,8 program,28 dev,10 sent,9 received,15".split()
>>> [ ( m.upper(),int(n)) for m, n in [i.split(",") for i in s ] ]
[('PID', 5), ('USER', 8), ('PROGRAM', 28), ('DEV', 10), ('SENT', 9), ('RECEIVED', 15)]

【讨论】:

    【解决方案2】:

    那……呢:

    def transform(functions, arguments):
      return [f(a) for f, a in zip(functions, arguments)]
    

    【讨论】:

      【解决方案3】:

      我目前正在使用这个:

      def transform(unaries, iterable):
          return map(lambda a, b: a(b), unaries, iterable)
      

      【讨论】:

      • 这与 Alex Martelli 的回答相比表现如何,看起来有点简单?
      猜你喜欢
      • 2018-05-12
      • 1970-01-01
      • 2020-06-11
      • 2019-11-17
      • 2017-12-30
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多