用于在2d数组中查找最大值的python程序

时间:2018-05-26 11:28:56

标签: python python-3.x

我正在尝试编写打印输入最大点的程序,但它没有给出正确的输出。

最大的定义 - 给定2空间中的一组点P = {p1,p2,...,pn},每个点由其xy整数坐标表示,输出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])

1 个答案:

答案 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)