列表上不受Python支持的操作数类型

时间:2019-07-06 09:39:50

标签: python

我有以下坐标的2d python列表mylist ...

[[294.0, 351.0], [486.0, 255.5]]

我正在尝试确定这些点中的哪一个最接近500x500区域的中心,像这样...

def sqr_dist(a, b):
    # return square of distance between points a and b #
    return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2

central = min( mylist, key=lambda r: sqr_dist( (mylist[0], mylist[1]), (500, 500) ) )

但是我遇到了错误...

TypeError: unsupported operand type(s) for -: 'list' and 'int'

我认为这是在告诉我我不能在min上使用list

如果是这种情况,那我该怎么办?

3 个答案:

答案 0 :(得分:1)

问题是由于a [0] -b [0]。 a [0]是一个列表,b [0]是一个整数。 因此,您应该做的是:

mylist = [[294.0, 351.0], [486.0, 255.5]]

def sqr_dist(a, b):
    # return square of distance between points a and b #
    return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2

central = min(mylist, key=lambda r: sqr_dist( r, (500.0, 500.0) ) )

区别在于,现在我将r(列表)传递给了lambda中的sqr_dist。问题出在lambda函数上。

答案 1 :(得分:1)

您只是错误地使用了lambda。

您的错误表示您正在尝试在-list之间做一个int减法。那是因为您将两者都传递给了sqr_dist函数。正确的方法是:

central = min( mylist, key=lambda r: sqr_dist( r, (500, 500) ) )

答案 2 :(得分:1)

sqr_dist( (mylist[0], mylist[1]), (500, 500) )
b=(500, 500)
a[0]=[294.0, 351.0]
b[0]=500

so you cannot subtract list with integer(a[0] - b[0])  如您的错误所示-符号-: 'list' and 'int'

正确的方法

central = min( mylist, key=lambda r: sqr_dist( r, (500, 500) ) )