据我所知,reduce函数有一个列表l和一个函数f.然后,它f在列表的前两个元素上调用函数f,然后使用下一个列表元素和前一个结果重复调用该函数.
所以,我定义了以下功能:
以下函数计算阶乘.
def fact(n):
if n == 0 or n == 1:
return 1
return fact(n-1) * n
def reduce_func(x,y):
return fact(x) * fact(y)
lst = [1, 3, 1]
print reduce(reduce_func, lst)
Run Code Online (Sandbox Code Playgroud)
现在,这不应该给我((1! * 3!) * 1!) = 6吗?但是,相反它给出了720.为什么720?它似乎也是一个因素6.但是,我需要理解为什么.
有人能解释为什么会发生这种情况并解决问题吗?
我基本上想要计算列表中所有条目的阶乘的乘积.备份计划是运行循环并计算它.但是,我更喜欢使用reduce.
我试图将一个大于10的数组中的所有元素过滤到一个新数组.我故意不使用,Array.prototype.filter()因为我想学习这个reduce()方法.这是我正在玩的代码
var collection = [3, 5, 11, 23, 1];
// fileter all the elements bigger than 10 to a new array
var output = collection.reduce(function(filteredArr, collectionElemet) {
if (collectionElemet > 10) {
return filteredArr.push(collectionElemet);
}
}, []);Run Code Online (Sandbox Code Playgroud)
我期望filteredArr在第一次回调执行时使用空数组初始化,因为这里提供了许多示例.但是当我运行这段代码时,我得到了错误
Cannot read property 'push' of undefined,我在哪里搞砸了?谢谢!
我从4 df收集数据,并希望通过rownames合并它们.我正在寻找一种有效的方法来做到这一点.这是我拥有的数据的简化版本.
df1 <- data.frame(N= sample(seq(9, 27, 0.5), 40, replace= T),
P= sample(seq(0.3, 4, 0.1), 40, replace= T),
C= sample(seq(400, 500, 1), 40, replace= T))
df2 <- data.frame(origin= sample(c("A", "B", "C", "D", "E"), 40,
replace= T),
foo1= sample(c(T, F), 40, replace= T),
X= sample(seq(145600, 148300, 100), 40, replace= T),
Y= sample(seq(349800, 398600, 100), 40, replace= T))
df3 <- matrix(sample(seq(0, 1, 0.01), 40), 40, 100)
df4 <- matrix(sample(seq(0, 1, 0.01), 40), 40, 100)
rownames(df1) <- paste("P", sprintf("%02d", c(1:40)), sep= "")
rownames(df2) …Run Code Online (Sandbox Code Playgroud) 我对R中的Reduce函数有疑问.我读了它的文档,但我仍然感到困惑.所以,我有5个基因名称的载体.例如:
v1 <- c("geneA","geneB",""...)
v2 <- c("geneA","geneC",""...)
v3 <- c("geneD","geneE",""...)
v4 <- c("geneA","geneE",""...)
v5 <- c("geneB","geneC",""...)
Run Code Online (Sandbox Code Playgroud)
我想知道哪些基因存在于至少两个载体中.有人建议:
Reduce(intersect,list(a,b,c,d,e))
Run Code Online (Sandbox Code Playgroud)
如果有人能够向我解释这个陈述是如何工作的,我将不胜感激,因为我已经看到Reduce在其他场景中使用过.
我在使用reduce的语法时遇到问题.我有以下格式的哈希:
H = {"Key1" => 1, "Key2" => 2}
Run Code Online (Sandbox Code Playgroud)
我想使用reduce来查找此函数中值的总和.
就像是
H.reduce(0) {|memo, elem| memo+=elem}
Run Code Online (Sandbox Code Playgroud)
我知道这是错的.我不明白如何使elem成为哈希值.
为什么当我想在reduce函数中使用push函数返回一个新数组时,我得到一个错误.但是,当我在reduce函数中使用concat方法时,它返回一个没有问题的新数组.
我要做的就是将数组传递给reduce函数并返回相同的数组.
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.push(cV);
},[]);
Run Code Online (Sandbox Code Playgroud)
这会返回错误.但是当我使用concat时:
var store = [0,1,2,3,4];
var stored = store.reduce(function(pV,cV,cI){
console.log("pv: ", pV);
return pV.concat(cV);
},[]);
Run Code Online (Sandbox Code Playgroud)
它返回相同的数组.
有什么想法吗?
即:"将两个参数的函数累加到序列项中,从左到右,以便将序列减少为单个值."
我是Python的新手.你能告诉我以下代码有什么问题吗?当我运行它时,我收到一条错误消息"NameError:全局名称'reduce'未定义".我问Goolge但是没用.:(
def main():
def add(x,y): return x+y
reduce(add, range(1, 11))
if __name__=='__main__':
main()
Run Code Online (Sandbox Code Playgroud) 简单地减少空数组将抛出:
线程"main"中的异常java.lang.UnsupportedOperationException:无法减少空的iterable.
链接时相同的异常:
val a = intArrayOf()
val b = a.reduce({ memo, next -> memo + next }) // -> throws an exception
val a1 = intArrayOf(1, 2, 3)
val b1 = a.filter({ a -> a < 0 }).reduce({ a, b -> a + b }) // -> throws an exception
Run Code Online (Sandbox Code Playgroud)
它是减少的预期操作还是一个bug?
有没有解决方法?
当在Python编程,我现在避免map,lambda并filter通过使用列表理解,因为它是在执行中更容易阅读和更快.但也reduce可以替换?
例如,对象具有union()在另一个对象上工作的运算符a1.union(a2),并且给出相同类型的第三个对象.
我有一个对象列表:
L = [a1, a2, a3, ...]
Run Code Online (Sandbox Code Playgroud)
如何将所有这些对象的union()与列表推导相对应,相当于:
result = reduce(lambda a, b :a.union(b), L[1:], L[0])
Run Code Online (Sandbox Code Playgroud)