Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中查找元组对的最小值索引_Python_Arrays_Lambda_Tuples_Min - Fatal编程技术网

在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)