javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

减少-Scala:fold vs foldL

我试图了解fold和foldLeft以及各自的reduce和reduceLeft是如何工作的。 我以fold和foldLeft为例

scala> val r = List((ArrayBuffer(1, 2, 3, 4),10))
scala> r.foldLeft(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)

scala> res28: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5)

scala> r.fold(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)
<console>:11: error: value _1 is not a member of Serializable with Equals
              r.fold(ArrayBuffer(1,2,4,5))((x,y) => x -- y._1)

为什么fold无法用作foldLeft? 什么是Serializable with Equals? 我了解fold和foldLeft在参数泛型类型方面具有稍微不同的API签名。 请指教。 谢谢。

trans by 2020-08-12T04:24:46Z

Python直方图一林

有许多方法可以编写可计算直方图的Python程序。

所谓直方图,是指一个函数,该函数对list(d.items())中对象的出现进行计数,并在字典中输出计数。 例如:

>>> L = 'abracadabra'
>>> histogram(L)
{'a': 5, 'b': 2, 'c': 1, 'd': 1, 'r': 2}

编写此函数的一种方法是:

def histogram(L):
    d = {}
    for x in L:
        if x in d:
            d[x] += 1
        else:
            d[x] = 1
    return d

有没有更简洁的编写此功能的方法?

如果我们在Python中具有字典理解功能,则可以编写:

>>> { x: L.count(x) for x in set(L) }

但是由于Python 2.6没有它们,我们必须编写:

>>> dict([(x, L.count(x)) for x in set(L)])

尽管此方法可能可读,但效率不高:L多次遍历。 此外,这不适用于单寿命发电机。 该功能对于迭代器生成器应同样有效,例如:

def gen(L):
    for x in L:
        yield x

我们可能会尝试使用list(d.items())函数(R.I.P.):

>>> reduce(lambda d,x: dict(d, x=d.get(x,0)+1), L, {}) # wrong!

糟糕,这行不通:键名称是list(d.items()),而不是d.items()。:(

我以:

>>> reduce(lambda d,x: dict(d.items() + [(x, d.get(x, 0)+1)]), L, {})

(在Python 3中,我们必须编写list(d.items())而不是d.items(),但这是假设的,因为那里没有27560065021451970197056。)

请用更好,更易读的一线击败我! ;)

trans by 2020-02-20T14:22:22Z

Kotlin中折叠和缩小之间的基本区别是什么? 什么时候使用?

我正在学习Kotlin的基础知识,我对Kotlin中的这两个函数fold()和reduce()感到很困惑,谁能给我一个具体的例子来区分它们吗?

trans by 2019-09-30T14:26:23Z

c# - “折叠”LINQ扩展方法在哪里?

我在MSDN的Linq示例中找到了一个名为Fold()的简洁方法,我想使用它。 他们的例子:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 

不幸的是,无论是在他们的示例中还是在我自己的代码中,我都无法进行编译,而且我在MSDN中找不到任何其他地方(如Enumerable或Array扩展方法)。 我得到的错误是一个普通的“不知道任何关于那个”的错误:

error CS1061: 'System.Array' does not contain a definition for 'Fold' and no 
extension method 'Fold' accepting a first argument of type 'System.Array' could 
be found (are you missing a using directive or an assembly reference?)

我正在使用其他我认为来自Linq的方法(比如Select()和Where()),我正在“使用System.Linq”,所以我认为一切都好。

这种方法确实存在于C#3.5中,如果是这样,我做错了什么?

trans by 2019-09-13T02:52:53Z

函数式编程中的reduce和foldLeft / fold之间的区别(特别是Scala和Scala API)?

为什么Scala和像Spark和Scalding这样的框架都有reducefoldLeft? 那么reducefold之间的区别是什么?

trans by 2019-08-18T21:58:12Z

python - 与函数式编程中的'fold'函数等效的'pythonic'是什么?

在Haskell中实现类似以下内容的最惯用方法是什么:

foldl (+) 0 [1,2,3,4,5]
--> 15

或者它在Ruby中的等价物:

[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15

显然,Python提供了reduce函数,这是fold的实现,完全如上所述,但是,我被告知'pythonic'编程方式是为了避免使用lambda术语和高阶函数,尽可能选择列表推导。 因此,有没有一种首选的方法来折叠Python中的列表或类似列表的结构,而不是reduce函数,或者是reduce实现这一目的的惯用方法?

trans by 2019-07-22T12:49:25Z

别名 - 注入与红宝石中的还原相同的东西?

我看到他们在这里被记录在案。 它们是一样的吗? 为什么Ruby有这么多别名(比如数组的map / collect)? 非常感谢。

trans by 2019-07-22T03:47:08Z

f# - 折叠和减少之间的差异?

试图学习F#,但在尝试区分折叠和减少时感到困惑。 折叠似乎做同样的事情,但需要额外的参数。 是否存在这两种功能存在的合理原因,或者它们是否适合具有不同背景的人? (例如:C#中的字符串和字符串)

以下是从示例中复制的代码段:

let sumAList list =
    List.reduce (fun acc elem -> acc + elem) list

let sumAFoldingList list =
    List.fold (fun acc elem -> acc + elem) 0 list

printfn "Are these two the same? %A " 
             (sumAList [2; 4; 10] = sumAFoldingList [2; 4; 10])
trans by 2019-07-01T00:10:18Z

函数式编程 - Javascript减少对象数组

假设我想为arr中的每个元素求和a.x

arr = [{x:1},{x:2},{x:4}]
arr.reduce(function(a,b){return a.x + b.x})
>> NaN

我有理由相信a.x在某些时候是未定义的。

以下工作正常

arr = [1,2,4]
arr.reduce(function(a,b){return a + b})
>> 7

我在第一个例子中做错了什么?

trans by 2019-05-18T22:02:24Z

mapreduce - 什么时候减少任务从Hadoop开始?

在Hadoop中什么时候开始减少任务? 它们是在完成一定百分比(阈值)的映射器后开始的吗? 如果是这样,这个门槛是否固定? 通常使用什么样的阈值?

trans by 2019-05-16T00:33:02Z

python - 找到lis的平均值

我必须在Python中找到列表的平均值。 到目前为止这是我的代码

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)

我已经得到它所以它将列表中的值加在一起,但我不知道如何将它分成它们?

trans by 2019-01-26T04:59:45Z

1 共1页