python - 使用 itertools.accumulate 计算后缀最大值

标签 python python-3.x algorithm data-structures python-itertools

计算整数序列的后缀最大值的推荐方法是什么?

以下是基于问题定义的蛮力方法(O(n**2)时间):

>>> A
[9, 9, 4, 3, 6]
>>> [max(A[i:]) for i in range(len(A))]
[9, 9, 6, 6, 6]

一种使用itertools.accumulate()O(n) 方法如下,它使用两个列表构造函数:

>>> A
[9, 9, 4, 3, 6]
>>> list(reversed(list(itertools.accumulate(reversed(A), max))))
[9, 9, 6, 6, 6]

是否有更 pythonic 的方法来做到这一点?

最佳答案

切片反转使事情更简洁,嵌套更少:

list(itertools.accumulate(A[::-1], max))[::-1]

不过,它仍然是您想要捆绑到一个函数中的东西:

from itertools import accumulate

def suffix_maximums(l):
    return list(accumulate(l[::-1], max))[::-1]

如果您使用的是 NumPy,您需要 numpy.maximum.accumulate:

import numpy

def numpy_suffix_maximums(array):
    return numpy.maximum.accumulate(array[::-1])[::-1]

关于python - 使用 itertools.accumulate 计算后缀最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48895575/

相关文章:

javascript - 如何在 Django 中运行 Javascript?

python - 为什么 super().__init__ 没有自引用?

algorithm - 表达式评估

python:numpy:命名数组的串联

python - sqlalchemy:无法使用日期列保存模型

python - DataSet 归一化输入值的范围

python - 如何在 Ubuntu 上将 python3 安装恢复为默认设置

django - 将 .csv 文件导入 PostgreSQL 并在第一列添加一个自动递增的 ID

python - 如何构建trie树来解决这个解析算法

c - 排序算法的错误行为