在Python中查找元组对的最小值索引
通过一个元组对列表在Python中查找元组对的最小值索引,python,arrays,lambda,tuples,min,Python,Arrays,Lambda,Tuples,Min,通过一个元组对列表n=[(266116),(81296),(148115),(324303)]我试图有效地找到最左边点的索引。目前,我的代码如下所示: min_index = 0 for i in range(1,len(n)): if points[i][0] < points[min_index][0]: minIndex = i 但这给了我实际的坐标,而不是我想要的索引。如何更改lambda函数以获得实际索引,在时间复杂度方面是否有更好的解决
n=[(266116),(81296),(148115),(324303)]
我试图有效地找到最左边点的索引。目前,我的代码如下所示:
min_index = 0
for i in range(1,len(n)):
if points[i][0] < points[min_index][0]:
minIndex = i
但这给了我实际的坐标,而不是我想要的索引。如何更改lambda函数以获得实际索引,在时间复杂度方面是否有更好的解决方案?谢谢在min
中使用范围(len(n))
而不是n
:
>>> min(range(len(n)), key = lambda i: n[i][0])
1
注意:循环方法并不低效,因为数据中没有明显的模式,因此您不能使用二分法(例如二进制搜索),而
min
做的事情几乎相同,只是因为它是内置的,更简洁,并且不太容易出错。您也可以在lambda
部分中枚举
,以获得索引和值,如下所示:
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)
谢谢!据我所知,虽然理论上,这与普通循环具有相同的复杂性,但实际上,因为在C层,min/max内置函数避免字节码解释器,它可以快一点,因此没有办法在比O(n)更高的复杂性中找到最小值,对吗?@SamuelV。确切地说,由于您必须循环所有元素,如果可以的话(您可以想到例外情况),最好使用内置方式(而不是您自己的方式)。for循环中没有任何错误或“低效”。
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)