【问题标题】:trouble with indexing and printing proper values on a 2-d list python在二维列表python上索引和打印正确值的麻烦
【发布时间】:2015-11-05 00:21:50
【问题描述】:

我有一个包含 x,y 对的简单二维列表。我正在编写一个程序来找到它们之间距离最短的两组点。

“值”列表包含所有距离,我很确定它们是正确的距离。

我想打印出创建最小距离的两个点。打印出最小距离显然很容易,但是打印出两点给我带来了麻烦。

我需要跟踪哪些点集产生了哪些距离。

我认为我可能不得不重新编写这段代码并重新开始以完成我想要的。但是,有没有办法用我所拥有的来实现这个结果?如果没有,我该怎么做?如何跟踪正在使用的索引?

代码:

multiD = [[1,3],
[-1,-1],
[1,1],
[2,0.5],
[2,-1],
[3,3],
[4,2],
[4,-0.5]]

def distance(x1, y1, x2, y2):
    distance = ( (((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1))) ** 0.5)
    return distance

values = []
for [x1,y1] in multiD:
    for [x2,y2] in multiD:
        if [x1,y1] != [x2,y2]:
            diff = distance(x1,y1,x2,y2)
            values.append(diff)

【问题讨论】:

    标签: python list indexing


    【解决方案1】:
    from itertools import combinations
    
    points = [
        [ 1,   3],   [-1, -1],   [ 1,  1],
        [ 2, 0.5],   [ 2, -1],   [ 3,  3],
        [ 4,   2],   [ 4, -0.5]
    ]
    
    def dist(pair):
        (x1, y1), (x2, y2) = pair
        return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
    
    def main():
        pairs = combinations(points, 2)
        closest = min(pairs, key=dist)
        print("The closest pair is {} at {}.".format(closest, dist(closest)))
    
    if __name__=="__main_":
        main()
    

    生产

    The closest pair is ([1, 1], [2, 0.5]) at 1.118033988749895.
    

    【讨论】:

    • 如果你有时间,key到底在做什么?当它被取出时,我们得到一组不同的对。它只是告诉最接近成对的最小值必须来自距离函数吗?我不确定
    • 它说“找到根据距离判断的最小对集”。如果你删除key=dist,你会得到“找到按数字升序判断的最小对集”,即([-1, -1], [1, 1])
    猜你喜欢
    • 2016-07-20
    • 2013-11-19
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    相关资源
    最近更新 更多