Javascript 你能在python或其他高阶函数中使用映射跟踪索引吗?
在Javascript中,当我们执行更高阶的函数时,我们维护对元素、索引和iterable的访问,我们在这些元素上执行函数。例如:Javascript 你能在python或其他高阶函数中使用映射跟踪索引吗?,javascript,python,lambda,higher-order-functions,Javascript,Python,Lambda,Higher Order Functions,在Javascript中,当我们执行更高阶的函数时,我们维护对元素、索引和iterable的访问,我们在这些元素上执行函数。例如: [10,20,30].map(function(element, index, array) { return elem + 2 } 我们维护对元素、索引和数组的访问 在Python中,这是否可能与Python内置的Map、Filter和Reduce方法有关?据我所知,reduce中的回调只能访问当前累积值和下一个值。请让我知道,在使用Python进行映射
[10,20,30].map(function(element, index, array) {
return elem + 2
}
我们维护对元素、索引和数组的访问
在Python中,这是否可能与Python内置的Map、Filter和Reduce方法有关?据我所知,reduce中的回调只能访问当前累积值和下一个值。请让我知道,在使用Python进行映射时,如何像在Javascript中那样维护对索引的访问。谢谢你不用
map
或filter
,你可以直接用它返回(索引,元素)
元组:
>>> l = [10,20,30]
>>> [i * x for i, x in enumerate(l)]
[0, 20, 60]
当然,您也可以将枚举
与映射
相结合,但这会导致更复杂的代码:
>>> list(map(lambda x: x[0] * x[1], enumerate(l)))
[0, 20, 60]
与使用
map
或filter
不同,您可以使用返回(索引,元素)
元组的:
>>> l = [10,20,30]
>>> [i * x for i, x in enumerate(l)]
[0, 20, 60]
当然,您也可以将枚举
与映射
相结合,但这会导致更复杂的代码:
>>> list(map(lambda x: x[0] * x[1], enumerate(l)))
[0, 20, 60]
是的,所以答案是,你没有能力使用map、filter或reduce函数,而应该使用enumerate?@JonathanMitchell是的,Python
map
中没有参数等来获取索引或其他类似于Javascriptmap
的方法。如果您想同时拥有项目和索引,则可以选择枚举。还要注意的是,在Python中,map或filter不仅适用于列表/数组,而且适用于任何iterables。在上面的例子中,l
可以很容易地被生成器替代。是的,所以答案是你没有能力使用map、filter或reduce函数,应该使用enumerate来替代吗?@JonathanMitchell是的,Pythonmap
中没有参数等来获取索引或与Javascriptmap
完全相同的其他方法。如果您想同时拥有项目和索引,则可以选择枚举。还要注意的是,在Python中,map或filter不仅适用于列表/数组,而且适用于任何iterables。在上面的例子中,l
可以很容易地被替换为生成器。