我正在尝试编写打印输入最大点的程序,但它没有给出正确的输出。
最大的定义 -
给定2空间中的一组点P = {p1,p2,...,pn}
,每个点由其x
和y
整数坐标表示,输出P
的最大点集,即那些点pi
,这样pi
不会被P
的任何其他点支配(并非两个坐标都占主导地位)
示例输入:
p1(5,7),p2(47,84),p3(89,4),(46,54),(100,1)
示例outut:
p2(47,84),(89,4),(100,1)
我的程序的想法是首先根据x
轴对点进行排序,然后比较y
坐标。
a=[[5,7],[47,84],[89,4][46,54],[100,1]]
#sort according to x axis
mylist.sort(key=lambda x: x[0])
#compare y coordinate of i to all element right to i
for i in reversed(range(len(a)):
j=i+1
while (j<len(a)):
if(mylist[i][1]>mylist[j][1]):
j+=1
if(j==len(a)):
print(mylist[i])
答案 0 :(得分:3)
在Python中你真的不怎么做。使用语言元素可以帮助您表达正在发生的事情,使代码变得更容易理解,并且作为奖励,更简洁。您想要找到a
的所有元素,其中a
的其他元素在两个坐标中都不会更大:
a=[[5,7],[47,84],[89,4],[46,54],[100,1]]
for point in a:
if not any(map(lambda p: p[0] > point[0] and p[1] > point[1], a)):
print(point)
你也可以使用列表理解而不是map
,这可能会更有效率:
a=[[5,7],[47,84],[89,4],[46,54],[100,1]]
for point in a:
if not any([p[0] > point[0] and p[1] > point[1] for p in a]):
print(point)