k = reduce((lambda x,y,z:abs(x-y)+ abs(y-z)+ abs(z-x)),range(List [0]))

时间:2017-10-07 17:57:12

标签: python-3.x

k = reduce((lambda x,y,z : abs(x-y) + abs(y-z) + abs(z-x)) , range(List[0]))

给出了运行时错误。

  

错误消息: - ' TypeError :()缺少1个必需的位置参数:   ž'

它的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

你的问题是(很可能,如果没有剩下的代码就很难判断......)你正在使用reduce(它将一个带有两个参数的函数作为它的第一个参数)并传递它是一个需要三个参数的函数。 reduce然后用两个参数调用你的匿名函数,这会导致异常。

作为旁注:我建议避免对变量使用大写名称(例如" List")。对于大多数python程序员来说,大写的名称意味着一个类。

答案 1 :(得分:0)

来自help(reduce)

reduce(...)
    reduce(function, sequence[, initial]) -> value

    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
    of the sequence in the calculation, and serves as a default when the
    sequence is empty.

似乎reduce一次只传递2个参数并减少它们。