【问题标题】:Iterate function over a list在列表上迭代函数
【发布时间】:2019-05-07 16:48:52
【问题描述】:

我有一个列表,其中的项目总数可能会发生变化。我想应用一个函数,它需要对列表中的前两个项目进行两个输入,结果我想对列表中的第三个项目应用相同的函数,结果我想对第四个项目应用函数,依此类推。 ..

当您知道列表中的项目数时,是否有更好的方法来执行以下操作

for x,y,a,b,c...n in result:
    z=np.convolve(x,y)
    z=np.convolve(z,a)
    z=np.convolve(z,b)
    z=np.convolve(z,c)
    .
    .
    .
    final=np.convolve(z,n)
print(final)

【问题讨论】:

  • 那只是reduce(np.convolve, result)

标签: python loops python-3.7 literate-programming


【解决方案1】:

你想要做的就是reduce-function。蟒蛇has them

对于您的情况,您可以像这样使用它们:

from functools import reduce

reduce(lambda x, y: np.convolve(x, y), result)

【讨论】:

  • 赞成,但请注意,您应该始终包含 reduce 函数的初始值设定项,包括此处。
  • 不,它是可选的。对于 OP 的问题,行为完全符合他的预期:If the optional initializer is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. If initializer is not given and sequence contains only one item, the first item is returned.
  • 很好,但这如何处理空列表? 有时你可以省略一个初始化器,但提供一个可以使代码更清晰,更重要的是,你不会脱离你的幺半群。
  • 在空迭代器的情况下它会崩溃。但是 OP 有空迭代器吗?反正我们不知道他在result里有什么。
  • 长度是可变的,根据 OP。没有理由认为它总是非零长度。
【解决方案2】:

你可以这样做:

for args in result:
    x, y, *others = args
    z = np.convolve(x,y)

    for a in others:
        z = np.convolve(z,a)

【讨论】:

  • 没有。使用reduce,不要自己重新实现。
  • 是的。恕我直言,它可能不优雅,但不值得立即投反对票。
猜你喜欢
  • 2022-01-09
  • 2021-10-28
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多