我编写了以下用于计算平面中最近对的代码。代码工作正常,但我有两个问题。首先,在第一个函数中是否有更短/更好的方法将点的表示从元组转换为复数?第二,我将第一个函数传递给第二个函数的方式是正确的吗?
{{1}}
答案 0 :(得分:0)
complex(item[0], item[1])
的较短版本是complex(*item)
,它将序列扩展为单独的参数。而且我认为这有点好一些,因为它会明显地失败,而且元组的长度超过2个。
但是写item[0] + item[1] * 1j
可能更清楚。除了看起来像编写复数的方式之外,这也避免了隐式转换为float
,允许complex(…)
静默处理Decimal
个对象或sympy
常量 - 值表达式 - 第一种情况下会出错,第二种情况下会出现sympy
复数常量值表达式。 (当然,如果你希望将事物强加给complex
值,那就是消极的而不是积极的。)
答案 1 :(得分:0)
您可以按如下方式编写算法
# Brute force algorithm.
def brute_force(hor, ver):
# Convert points to complex
points = [complex(x, y) for x, y in zip(hor, ver)]
n = len(points)
min_distance = sys.maxsize
closest_pair = None
if n < 2: return min_distance
else:
for i in range(n):
for j in range(i+1, n):
temp = abs(points[i] - points[j])
if temp < min_distance:
min_distance = temp
closest_pair = (points[i], points[j])
return min_distance, closest_pair
x = [1, 4, 3, 1]
y = [1, 5, 1, 5]
brute_force(x,y)