Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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减少错误?_Python_Lambda_Arguments_Reduce - Fatal编程技术网

python减少错误?

python减少错误?,python,lambda,arguments,reduce,Python,Lambda,Arguments,Reduce,以下是我的python代码: >>> item = 1 >>> a = [] >>> a.append((1,2,3)) >>> a.append((7,2,4)) >>> sums=reduce(lambda x:abs(item-x[1]),a) Traceback (most recent call last): File "<stdin>", line 1, in <modul

以下是我的python代码:

>>> item = 1
>>> a = []
>>> a.append((1,2,3))
>>> a.append((7,2,4))
>>> sums=reduce(lambda x:abs(item-x[1]),a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (2 given)
>>> 
>item=1
>>>a=[]
>>>a.附加((1,2,3))
>>>a.附加((7,2,4))
>>>总和=减少(λx:abs(项目-x[1]),a)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:()正好接受1个参数(给定2个)
>>> 
我怎样才能修好它?
谢谢

lambda只接受一个参数,但是
reduce
需要一个接受两个参数的函数。让你的lambda接受两个参数

既然你没有说你想让这段代码做什么,我猜:

the_sum=reduce(lambda x,y:abs(y[1]-x[1]),a)

reduce
要求给定的函数接受2个参数。对于iterable中的每个项,它将向函数传递当前项和函数的上一个返回值。因此,获取列表的总和是
reduce(lambda:x,y:x+y,l,0)

如果我理解正确,要获得您试图获得的行为,请将代码更改为:

a_sum = reduce(lambda x,y: x + abs(item-y[1]), a, 0)
但我可能误解了你想得到什么。
进一步的信息在
reduce
函数的docstring中。

您的问题本身有点不清楚。不管怎样,我只是假设一下--

我假设您可能对获取列表中所有元素的总和感兴趣。如果这就是问题所在,那么可以分两步解决

1) 第一步应该是平展列表

>>> new_list = [y for x in a for y in x] # List comprehension used to flatten the list
[1, 2, 3, 7, 2, 4] 
>>> sum(new_list)
19
2) 然后添加列表中的所有元素

>>> new_list = [y for x in a for y in x] # List comprehension used to flatten the list
[1, 2, 3, 7, 2, 4] 
>>> sum(new_list)
19
一班轮

>>> sum([y for x in a for y in x])
19
另一个假设是,如果您的问题是按列表中的项减去元组的每个元素,则使用以下方法:

>>> [tuple(map(lambda y: abs(item - y), x)) for x in a]
[(0, 1, 2), (6, 1, 3)] # map function always returns a list so i have used tuple function to convert it into tuple.
如果是其他问题,请详细说明


PS:Python列表理解比其他任何东西都好得多,效率也更高。

请注意,
sum
是Python中的内置函数,因此建议您使用不同的名称,就像我在回答中所做的那样。我已将sum更改为sums,并且出现了相同的错误。是的,当然。下面的答案解释了真正的问题是什么。我刚才说,现在对
sum
函数进行阴影处理是一种更好的做法:)此外,我认为您可以从答案中看出,不清楚您正在尝试做什么。你能添加一个代码应该完成什么的描述吗?