在元组列表中查找最小值和最大值,即 (min,max),(max,min)?
Finding minimum and maximum in a list of tuples i.e (min,max),(max,min)?
我有一个元组列表,(x1,y1),(x2,y2) 等,我想找到的是 x 是最大值,y 是最小值和各种其他组合的元组。我已经能够找到 x 是最大值和 y 是最大值的位置,以及 x 是最小值和 y 是最小值的位置,但我不确定如何先按最大值过滤,然后按最小值过滤,反之亦然。
这是我目前尝试过的方法:
coords = [(200,200),(40,150),(50,180),(20,200),(200,20),(20,20)]
c1 = max(coords, key=operator.itemgetter(0))
c2 = min(coords,key = operator.itemgetter(0))
c3 = max(coords,key = operator.itemgetter(1))
c4 = min(coords,key = operator.itemgetter(1))
#returns (200,200),(20,200),(200,200),(200,20))
#wanted (200,200),(20,200), (200, 20), (20,20)
#(max,max), (min,max), (max,min), (min,min) or some order of this
实际上 'coords' 有 6 个以上的元组。我最终为 c1 和 c3 返回了相同的坐标,例如当我想要 coords[0] 和 coords[3] 时,所以 (max,max) 然后 (min,max)。我是不是把事情搞得太复杂了,还是有更简单的方法来解决这个问题?输出的顺序并不特别重要,只要每次坐标更改时的顺序都相同即可。我在这里将这个问题简化为 post 所以可能会有一些错误抱歉。谢谢!
一种可能的方法是确定 x 和 y 的最大值和最小值,用这些值生成所有可能的元组,并检查列表中是否存在这些元组。
coords = [(200,200),(20,200),(200,20),(20,20)]
max_x = max([t[0] for t in coords])
min_x = min([t[0] for t in coords])
max_y = max([t[1] for t in coords])
min_y = min([t[1] for t in coords])
for x in [min_x,max_x]:
for y in [min_y,max_y]:
if (x,y) in coords:
print( (x,y) )
鉴于您的澄清评论,我认为这足以满足您的需求。如果输入数据没有可靠地包含您正在寻找的组合,您必须更具体地说明您想要什么。
就此而言,如果可以保证输入数据中包含所需的组合,则可以删除 if
行并只输出所有排列。但验证它们是否确实存在可能是明智的。
我有一个元组列表,(x1,y1),(x2,y2) 等,我想找到的是 x 是最大值,y 是最小值和各种其他组合的元组。我已经能够找到 x 是最大值和 y 是最大值的位置,以及 x 是最小值和 y 是最小值的位置,但我不确定如何先按最大值过滤,然后按最小值过滤,反之亦然。
这是我目前尝试过的方法:
coords = [(200,200),(40,150),(50,180),(20,200),(200,20),(20,20)]
c1 = max(coords, key=operator.itemgetter(0))
c2 = min(coords,key = operator.itemgetter(0))
c3 = max(coords,key = operator.itemgetter(1))
c4 = min(coords,key = operator.itemgetter(1))
#returns (200,200),(20,200),(200,200),(200,20))
#wanted (200,200),(20,200), (200, 20), (20,20)
#(max,max), (min,max), (max,min), (min,min) or some order of this
实际上 'coords' 有 6 个以上的元组。我最终为 c1 和 c3 返回了相同的坐标,例如当我想要 coords[0] 和 coords[3] 时,所以 (max,max) 然后 (min,max)。我是不是把事情搞得太复杂了,还是有更简单的方法来解决这个问题?输出的顺序并不特别重要,只要每次坐标更改时的顺序都相同即可。我在这里将这个问题简化为 post 所以可能会有一些错误抱歉。谢谢!
一种可能的方法是确定 x 和 y 的最大值和最小值,用这些值生成所有可能的元组,并检查列表中是否存在这些元组。
coords = [(200,200),(20,200),(200,20),(20,20)]
max_x = max([t[0] for t in coords])
min_x = min([t[0] for t in coords])
max_y = max([t[1] for t in coords])
min_y = min([t[1] for t in coords])
for x in [min_x,max_x]:
for y in [min_y,max_y]:
if (x,y) in coords:
print( (x,y) )
鉴于您的澄清评论,我认为这足以满足您的需求。如果输入数据没有可靠地包含您正在寻找的组合,您必须更具体地说明您想要什么。
就此而言,如果可以保证输入数据中包含所需的组合,则可以删除 if
行并只输出所有排列。但验证它们是否确实存在可能是明智的。