将元组列表中给出的坐标转换为复数

时间:2018-04-04 04:00:41

标签: python

我编写了以下用于计算平面中最近对的代码。代码工作正常,但我有两个问题。首先,在第一个函数中是否有更短/更好的方法将点的表示从元组转换为复数?第二,我将第一个函数传递给第二个函数的方式是正确的吗?

{{1}}

2 个答案:

答案 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)