对于下面的数组,我有兴趣根据 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
中,然后打印。如果算法的逻辑发生变化,请告诉我。