我有以下坐标的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
如果是这种情况,那我该怎么办?
答案 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) ) )