Python中是否有从右向左累加的方法?

Python中是否有从右向左累加的方法?,python,python-3.x,itertools,accumulate,Python,Python 3.x,Itertools,Accumulate,Python已经有了一个itertools.acculate函数。但是,此功能从左到右累加: >>列表(itertools.accumulate([[x]表示范围内的x(5)]) [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]] 相反,我想从右向左累加,如下所示: >>>列表(从右开始累加([[x]表示范围(5)]内的x) [[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4], [3, 4], [4]]

Python已经有了一个
itertools.acculate
函数。但是,此功能从左到右累加:

>>列表(itertools.accumulate([[x]表示范围内的x(5)])
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
相反,我想从右向左累加,如下所示:

>>>列表(从右开始累加([[x]表示范围(5)]内的x)
[[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4], [3, 4], [4]]
我目前的解决方案(仅适用于列表)效率低下且丑陋:

>>列表(x[:-1]表示x在累加中([y]表示y在反向(范围(5)))[:-1]
[[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4], [3, 4], [4]]
从右到左累积列表的最佳方法是什么?

编辑:我使用的是一个范围,只是作为一个示例。我希望能够将此方法应用于任何嵌套列表。

下面是另一个不使用范围的示例:

>>列表(从右侧(['a','b','c'])累积)
['abc','bc','c']

您只需从右侧对
累加的输入进行单次传递即可

def accumulate_from_right(vals):
   return [vals[i:] for i in range(len(vals))]

print(accumulate_from_right(list(range(5))))
print(accumulate_from_right(['a', 'b', 'c']))
输出:

[[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4], [3, 4], [4]]
[['a', 'b', 'c'], ['b', 'c'], ['c']]

你可以试试类似的东西

[list(range(i, 5)) for i in range(5)]
返回

[[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4], [3, 4], [4]]

使用itertools累积并在结果处使用[:-1]进行反转不是很容易吗

list(itertools.accumulate([[x] for x in range(5)]))[::-1]

这个问题是关于
accumulate
的,还是仅仅是关于如何获得“降序”后缀列表的问题?
print(list(itertools.accumulate([[x]表示范围(5,0,-1)])[:::-1])
?如果您展示更多的示例,以便清楚地了解您希望以何种方式推广它,这将非常有用。@chepner抱歉!我误解了你所说的“降序”后缀的意思。我希望函数能够将此方法应用于任何列表!这很聪明,但是有没有办法推广这种方法呢?我只是以范围为例。@PradhyumR这应该是一个很好的概括-只需将您的列表替换为
范围(5)
:)@Tim Ajax1234的方法使用模式匹配和范围来创建所需的输出。它不能很好地推广到字符串(这就是我使用它的原因)。@PradhyumR请查看我最近的编辑。不,列表的实际内容将是不同的,这是正确的,我的错误。