如何用Python选取复合条件的坐标组成新的列表?

具体情况是这样的:在一定空间内有很多点(坐标已知)组成的一个元组p,现在想把距离小于5的点输入到一个元组内,然后返回一个元组的列表。应该如何编程呢?... 具体情况是这样的:在一定空间内有很多点(坐标已知)组成的一个元组p,现在想把距离小于5的点输入到一个元组内,然后返回一个元组的列表。应该如何编程呢? 展开
 我来答
yang_bigarm
2013-10-02 · TA获得超过3949个赞
知道大有可为答主
回答量:1664
采纳率:100%
帮助的人:617万
展开全部
你这个问题涉及到空间数据结构的知识,如果希望全面地了解这个方面,请找本《计算几何》的书来读一读,有专门解决这个问题的高级算法。

如果只是简单地做一下,那么用一个二重循环,计算点两两之间的距离,然后输出就行了。
distance 是距离函数,nearest_point计算所有距离小于5的点组成的元组的列表。

def distance(x,y):
s=0

for i in range(len(x)):
s+=(x[i]-y[i])*(x[i]-y[i])
return math.sqrt(s)

def nearest_point(points):
dc={}
for p in points:
lp=[]
dc[p] = lp
for q in points:
if p!=q and distance(p,q)<5:
lp.append(q)
return dc
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
野人拆
推荐于2017-11-16 · TA获得超过1069个赞
知道小有建树答主
回答量:815
采纳率:57%
帮助的人:560万
展开全部

稍微修改了下:

import math
 
somePoints=[[2,5],[13,2],[44,3],[1,1],[0,5],[5,0]]
def getPoints(points,maxDistance):
    result = dict()
    total = len(points)
    for i in range(0,total):
        x = points[i][0]
        y = points[i][1]
        t = []
        for j in range(i+1,total):
            x1 = points[j][0]
            y1 = points[j][1]
            if math.sqrt((x1-x)**2+(y1-y)**2)<=maxDistance:
                t.append(points[j])
        result[str(points[i])]=t
    return result

for k,v in getPoints(somePoints,5).items():
    print k,":",v

getPoints的参数:

points:存放所有点的坐标列表

maxDistance:设置的两点间最大距离

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wenjie1024
2017-11-16 · TA获得超过2381个赞
知道大有可为答主
回答量:1737
采纳率:72%
帮助的人:854万
展开全部

你所谓的距离小于5是指: x**2 + y ** 2 < 25 吗?

def is_less_5(A):
    A[0] ** 2 + A[1] ** 2 < 25
    
result = tuple([i for i in p if is_less_5(i)])
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式