我能够使用map和sum实现这个功能,但如何使用reduce?
有两个列表:a,, b它们具有相同数量的值.我想算一算
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
Run Code Online (Sandbox Code Playgroud)
我写的工作版本map是
value = sum(map(lambda (x,y): x*y, zip(a, b)))
Run Code Online (Sandbox Code Playgroud)
怎么用reduce呢?我写:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
Run Code Online (Sandbox Code Playgroud)
我收到错误" TypeError: 'float' object is unsubscriptable".
任何人都可以对此有所了解吗?
我有一个具有以下格式的对象数组
[{'list': 'one', 'item': 1},
{'list': 'one', 'item': 2},
{'list': 'one', 'item': 3},
{'list': 'two', 'item': 1},
{'list': 'two', 'item': 2}]
Run Code Online (Sandbox Code Playgroud)
我想像这样改造它
[{'one': [1, 2, 3]},
{'two': [1, 2]}]
Run Code Online (Sandbox Code Playgroud)
我怎么能用Array.map函数呢?这是最好的选择吗?
我希望能够map在Swift中使用Swift 来修改我的对象数组,而不需要遍历每个元素.
在此之前能够做到这样的事情(这里有更多细节描述:
gnomes = gnomes.map { (var gnome: Gnome) -> Gnome in
gnome.age = 140
return gnome
}
Run Code Online (Sandbox Code Playgroud)
感谢Erica Sadun和其他人,新提案已经完成,我们现在正在摆脱C风格的循环并var在循环中使用.
在我的情况下,我首先得到一个警告,以删除varin然后一个错误我gnome是一个常数(自然)
我的问题是:我们如何更改一个map或新的样式循环中的数组,以便为Swift 3.0做好充分的准备?
我有以下代码用于在Python中映射嵌套列表以生成具有相同结构的列表.
>>> nested_list = [['Hello', 'World'], ['Goodbye', 'World']]
>>> [map(str.upper, x) for x in nested_list]
[['HELLO', 'WORLD'], ['GOODBYE', 'WORLD']]
Run Code Online (Sandbox Code Playgroud)
这可以单独使用列表理解(不使用map函数)吗?
我正在做一些通用数据的 pyplotting 并将其从功率值转换为dB值.由于这些值来自系统,因此0用作"此处有用数据结束"指标(数学的性质,而不是定义的值).
我通常的处理方法是在try/except中包含转换并返回默认的"low"值,例如
def f(value):
try:
return convert(value)
except ValueError:
return -140 #implementation specific, don't worry
Run Code Online (Sandbox Code Playgroud)
对于我的框架中90%的使用情况,这是很好的和花花公子,除了图形.
我很懒,所以我现在做的是:
pl.plot(xvals,map(f,yvals))
Run Code Online (Sandbox Code Playgroud)
这会正确地绘制数据,并且当数据结束时,会从悬崖上掉下来,这是预期的行为.但我想发生这样的是图形刚刚结束时,它满足了ValueError异常,并以F做掉()完全.
除了将地图分成一个循环,任何人都有任何好主意?
更新:
我正在使用Pylab/MatplotLib"端点"是执行依赖的; 有时上述并不重要,因为没有"坏"值.这一切都是为了让我懒惰并使用matplotlibs图缩放而不是基于ydata的min来重置动态ylim(在这种情况下我不做atm,只是ylim(-140).)
关于答案的模糊重要更新:unutbu的答案就是我实际将用于实现的内容,因为(在问题依赖项中没有提到),因为在这个经常使用的函数中引发StopIteration会对无关紧要的问题造成严重破坏控制逻辑,而不是将所有其他实例放在try-excepts中; 有时候-inf比你想象的更有意义.
感谢大家的速度非常快,我为在QuestionFail的unutbu道歉.
python functional-programming exception-handling exception map-function
在Python 2中,我可以执行以下操作:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> 4
Run Code Online (Sandbox Code Playgroud)
在Python 3中得到一个KeyError:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> KeyError: 'c'
Run Code Online (Sandbox Code Playgroud)
我想在Python 3中实现与Python 2中相同的行为.
我知道Python 3中的map将返回一个迭代器(lazy evaluation和whatnot),必须迭代它才能更新字典.
我假设d['c']密钥查找会以某种方式触发映射迭代,但事实并非如此.
有没有pythonic方法来实现这种行为而不编写for循环,我发现与map相比,它是冗长的.
我想过使用列表推导:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> [x for x in map(d.update, extras)]
>> d['c']
>> 4
Run Code Online (Sandbox Code Playgroud)
但它似乎并不像pythonic.
我有阵列: [1,2,3,4,5,6,7]
我想实现: [[1,2], [3,4], [5,6], [7]]
我在想Array.map,但它似乎无法映射到任何元素?
我有(使用Underscorejs):
arr.map(function(el, idx, arr) {
if (idx%2 != 0) return null;
if (idx == arr.length-1) return [el];
return [el, arr[idx+1]]
}).compact();
Run Code Online (Sandbox Code Playgroud)
这仍然有点难看.如何实现转换(没有显式循环)?
在本节末尾的"勇敢与真实的Clojure"中,减少了一个挑战:
如果你想要一个真正让你的头发恢复的运动,请尝试
map使用reduce
事实证明,这比我想象的要困难得多(至少对我来说是一个Clojure初学者).经过几个小时,我想出了这个:
(defn map-as-reduce
[f coll]
(reduce #(cons (f %2) %1) '() (reverse coll)))
Run Code Online (Sandbox Code Playgroud)
这是一个更好的方法吗?我特别感到沮丧的是,我必须反转输入集合才能使其正常工作.它似乎有点不雅!
我正在学习JavaScript。我写了这段代码来学习map函数。但是后来我感到困惑,为什么为什么不连续映射它,因为每个映射序列都会将一个新元素推入数组。它不应该在映射过程中继续推动新元素吗?为什么map函数仅对原始的三个元素运行,而对新的推入元素不运行?
我试图在节点环境中对其进行调试,并且该arr变量处于关闭状态。我知道闭包是什么,但我无法理解这里发生了什么。
let array = [1, 2, 3];
array.map((element) => {
array.push(10);
console.log(element);
});Run Code Online (Sandbox Code Playgroud)
我希望输出应该是 1,2,3,10,10,10,10,10,10,10,10......10
但是实际输出仅为1,2,3。
假设我们有一个异步生成器:
exports.asyncGen = async function* (items) {
for (const item of items) {
const result = await someAsyncFunc(item)
yield result;
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以映射该生成器?本质上我想这样做:
const { asyncGen } = require('./asyncGen.js')
exports.process = async function (items) {
return asyncGen(items).map(item => {
//... do something
})
}
Run Code Online (Sandbox Code Playgroud)
截至目前.map无法识别异步迭代器。
另一种方法是使用for await ... of ,但这远不如使用.map
map-function ×10
javascript ×4
python ×4
arrays ×3
array-push ×1
clojure ×1
closures ×1
dictionary ×1
exception ×1
iterator ×1
list ×1
nested-lists ×1
node.js ×1
python-2.7 ×1
python-3.x ×1
reduce ×1
sum ×1
swift ×1