我正在尝试从文本文件中的点列表中找到最接近的点对。我正在尝试遍历文件,然后将结果附加到一个空文件,然后对该文件进行最短距离的排序。
我的挑战是创建循环以读取文本文件中的每对点。下面是到目前为止我想到的代码:
输入文件(文本)如下所示:
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)
答案 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)