对于下面的数组,我有兴趣根据y轴对X轴进行排序,并记录最低X值的最低元组。
该数组是:
A = [(537, 14),
(537, 12),
(538, 13),
(538, 14), # (538, 14) should be removed and (537, 14) should be kept
(539, 12),
(709, 9)]
我会这样做:
New_A = [(537, 14),
(537, 12),
(538, 13),
(539, 12),
(709, 9)]
我可以在这尝试什么?
鉴于:
a = [(537, 14),
(537, 12),
(538, 13),
(538, 14),
(539, 12),
(709, 9)]
你可以做:
from itertools import groupby
from operator import itemgetter
f = itemgetter(1)
new_a = [next(group) for _, group in groupby(sorted(a, key=f, reverse=True), key=f)]
这使:
[(537, 14),
(538, 13), # <- I am assuming you have a typo here OP
(537, 12),
(709, 9)]
itertools.groupby
的更多信息。operator.itemgetter
的另一个。要对列表进行排序,请使用
New_A = sorted(A, key=lambda x: x[0])
常见的模式是使用某些对象的索引作为关键字对复杂对象进行排序。
问题的第二部分。
根据X获得最低值,根据y获得最低值,如下所示
lowest = New_A[0]
print(lowest)
(537, 14)
lowest = New_A[-1]
print(lowest)
(709, 9)
给定的二维数组是:
A = [(537, 14), (537, 12), (538, 13), (538, 14), (539, 12), (709, 9)]
让我们假设A
与(x,y)
是有序对的关系。因此,声明两个变量x
和y
并将它们初始化为第一个值,即
x=537 and y=14
于是
x=A[0][0]
y=A[0][1]
还需要两个虚拟变量i
和j
来迭代二维数组:以下算法选择最低的x
值。如果有超过1个x
值相等,则选择(x,y)
使得y
最低。
# Here it starts :
j=0
for i in range(1,len(A)):
for j in range(0,1) :
if A[i][j]<x :
x=A[i][0]
y=A[i][1]
elif x==A[i][0] and y>A[i][1] :
y=A[i][1]
ans=(x,y)
print(ans)
有序对(x,y)存储在变量ans
中,然后打印。如果算法的逻辑有变化,请告诉我。