如何制作一个与 R 中的“Reduce”类似的“functools.reduce”实现?

问题描述 投票:0回答:1

这是一个使用

Reduce

的 R 示例
x <- c(1, 2, 2, 4, 10, 5, 5, 7)
Reduce(\(a, b) if (tail(a, 1) != b) c(a, b) else a, x) # equivalent to `rle(x)$values`

我很好奇的是:是否有可能通过在Python中使用

functools.reduce
来实现高度相似的翻译来实现相同的功能,例如

from functools import reduce
x = [1,2,2,4,10,5,5,7]
reduce(lambda a, b: a + [b] if a[-1]!= b else a, x)

但不幸的是,它给出了类似的错误

{
    "name": "TypeError",
    "message": "'int' object is not subscriptable",
    "stack": "---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[58], line 4
      1 from functools import reduce
      2 x = [1,2,2,4,10,5,5,7]
----> 4 reduce(lambda a, b: a + [b] if a[-1]!= b else a, x)

Cell In[58], line 4, in <lambda>(a, b)
      1 from functools import reduce
      2 x = [1,2,2,4,10,5,5,7]
----> 4 reduce(lambda a, b: a + [b] if a[-1]!= b else a, x)

TypeError: 'int' object is not subscriptable"
}

我的问题是:Python 中是否有像 R 一样工作的单行

reduce

python r arrays reduce
1个回答
0
投票

您可以使用列表作为初始:

from functools import reduce
x = [1,2,2,4,10,5,5,7]

reduce(lambda a, b: a + [b] if a[-1]!= b else a, x, [None])[1:]
[1, 2, 4, 10, 5, 7]
© www.soinside.com 2019 - 2024. All rights reserved.