使用Python从列表中查找最接近的点

时间:2019-03-13 13:07:35

标签: python-3.x

我正在尝试从文本文件中的点列表中找到最接近的点对。我正在尝试遍历文件,然后将结果附加到一个空文件,然后对该文件进行最短距离的排序。

我的挑战是创建循环以读取文本文件中的每对点。下面是到目前为止我想到的代码:

输入文件(文本)如下所示:

  

2 20 55 217 33 45 100 50 99 22 13 86 60 217 34 29 14 19 200 25 100 7

#empty List
list2= []

#distance calculation for 2 closest points
def closest_point(coord1,coord2):

    (x1,y1) =coord1
    (x2,y2) =coord2

    result1=((x2-x1)**2+(y2-y1)**2)**0.5

    return list2.append(result1)

#reading input file with pairs of coordinates
with open('c:\\closepoints.txt') as my_new_file:
    contents = my_new_file.read()
    list = contents.split()
    list1 = zip(list[::2], list[1::2])
    list1 = set(list1)
    print (list1)

1 个答案:

答案 0 :(得分:-1)

更新:根据评论,以下是针对此问题的更有效解决方案,该解决方案输出的输出与原始答案相同:

with open('c:\\closepoints.txt') as my_new_file:
    pairs = [int(x) for x in my_new_file.readline().strip().split()]
    list1 = list(zip(pairs[::2], pairs[1::2]))
    print(list1)

(下面是原始答案)

您还可以创建一个正则表达式,将所有数字解析为map生成器对象。然后,您可以使用列表解压缩来扩展列表,最后进行列表理解,将列表压缩成对,并在必要时丢弃最后一个元素。此代码将显示[(2, 20), (55, 217), (33, 45), (100, 50), (99, 22), (13, 86), (60, 217), (34, 29), (14, 19), (200, 25), (100, 7)]

import re

with open('c:\\closepoints.txt') as my_new_file:
    contents = my_new_file.read()
    pairs = [*map(int, re.findall(r'\d+', contents))]
    list1 = [(pairs[i],pairs[i+1]) for i in range(0,len(pairs),2)]
    print (list1)

改编自this regex answer