对于下面的数组,我有兴趣根据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)]
我可以在这尝试什么?
答案 0 :(得分:6)
鉴于:
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
。答案 1 :(得分:1)
要对列表进行排序,请使用
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)
答案 2 :(得分:1)
给定的二维数组是:
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
值。如果有多个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
中,然后打印。
如果算法的逻辑有变化,请告诉我。