查找Python中元组对最小值的索引



使用元组对n=[(266, 116), (81, 296), (148, 115), (324, 303)]的列表,我试图有效地找到最左边点的索引。目前,我的代码看起来像这样:

min_index = 0
for i in range(1,len(n)): 
if points[i][0] < points[min_index][0]: 
minIndex = i 

但是对我来说这看起来并不有效。我还发现了一个使用lambda函数的解决方案,它可能至少看起来更吸引人(idk关于min函数的时间复杂性)

min(n, key = lambda t: t[0])

但是这给了我实际的坐标,而不是我想要的索引。我如何改变lambda函数来给我实际的索引,在时间复杂度方面是否有更好的解决方案?谢谢你

min中使用range(len(n))而不是n:

>>> min(range(len(n)), key = lambda i: n[i][0])
1

注意:循环方法无论如何都不是低效的,因为数据中没有明显的模式,所以你不能,例如,使用二分法(如二分搜索),min几乎同样的事情,它只是有时首选,因为它是内置的,更简洁,更不容易出错。

您也可以在lambda部分中使用enumerate来获取索引和值:

n = [(266, 116), (81, 296), (148, 115), (324, 303)]
min_index, min_value = min(enumerate(n), key = lambda n: n[1][0])
print(min_index, min_value)   # 1 (81, 296)

最新更新