在 Python 中找到元组对的最小值索引
Find the index of minimum value of tuple pairs in 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 函数的解决方案,它至少看起来更有吸引力(我知道 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)
使用元组对列表 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 函数的解决方案,它至少看起来更有吸引力(我知道 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)