Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在对的列表上使用Python reduce_Python_Map_Functional Programming_Reduce_Accumulator - Fatal编程技术网

在对的列表上使用Python reduce

在对的列表上使用Python reduce,python,map,functional-programming,reduce,accumulator,Python,Map,Functional Programming,Reduce,Accumulator,我试图将列表中的一组元素配对,以创建一个最终的对象,其方式类似于创建一个对象的总和。我尝试使用一个简单的变体: Reals。我想做以下几点: nums = [1, 2, 3] reduce(lambda x, y: x + y, nums) 除此之外,我想向数字列表中特定于每个元素的总和添加附加信息nums。例如,对于列表中的每对(a,b),将总和作为(a+b)运行: 这不起作用: >>> reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1

我试图将列表中的一组元素配对,以创建一个最终的对象,其方式类似于创建一个对象的总和。我尝试使用一个简单的变体:<代码> Reals。我想做以下几点:

nums = [1, 2, 3]
reduce(lambda x, y: x + y, nums)
除此之外,我想向数字列表中特定于每个元素的总和添加附加信息
nums
。例如,对于列表中的每对(a,b),将总和作为(a+b)运行:

这不起作用:

>>> reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1]), nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: 'int' object is unsubscriptable
减小(λx,y:(x[0]+x[1])+(y[0]+y[1]),nums) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“”,第1行,在 TypeError:“int”对象不可订阅
为什么它不起作用?我知道我可以将
nums
编码为一个平面列表-这不是重点-我只希望能够创建一个reduce操作,该操作可以迭代一个对列表,或者同时迭代两个长度相同的列表,并汇集两个列表中的信息。谢谢。

查看您传递给reduce的lambda:

f = lambda x, y: (x[0]+x[1]) + (y[0]+y[1])
f
返回的值将作为参数传递给另一次调用
f
。但是,虽然
f
希望它的参数是成对的,但它返回的值是
int
。您还需要使此函数返回一对。例如,这将分别总结左侧和右侧:

>>> nums = [(1, 0), (2, 5), (3, 10)]
>>> reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), nums)
(6, 15)
您可以做的另一件事是将累积值与列表元素区别对待:您可以将累积值设置为
int
,而列表元素是成对的。如果执行此操作,则必须将
初始值设定项
参数传递给
reduce
,以便将累加器正确初始化为
int

>>> nums = [(1, 0), (2, 5), (3, 10)]
>>> reduce(lambda acc, y: acc + y[0] + y[1], nums, 0)
21

是否希望reduce的结果是一个元组?是否必须使用reduce?我更喜欢简单求和(x[0]+x[1]表示以nums表示的x)有没有办法从对上的reduce得到一个迭代器?类似于列表的
enumerate(mylist)
,它不仅返回当前元素,还返回其在列表中的位置。
reduce
中的
lambda
是否可以访问上述示例中使用的配对数?@user248237您可以使用
enumerate(mylist)
作为
reduce
的输入。
>>> nums = [(1, 0), (2, 5), (3, 10)]
>>> reduce(lambda acc, y: acc + y[0] + y[1], nums, 0)
21