python减少错误?
以下是我的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
>>> 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
函数进行阴影处理是一种更好的做法:)此外,我认为您可以从答案中看出,不清楚您正在尝试做什么。你能添加一个代码应该完成什么的描述吗?