在某个索引的嵌套循环中查找最大值时,该键通常优先。如果列表中的最大值所在的键有多个最大值,则嵌套列表中的其他元素用于查找最大值的索引。
例:
my_list = [[1, 2], [2, 3], [2, 7]]
print(max(my_list))
输出:
[2, 7]
但是,我希望找到第0个索引中最大值的最小索引,而不会受到列表中其他值的任何干扰,并使用优化代码。
现在,这是我为实现目标所做的工作,而且看起来不是最有效的方法。
my_list = [[1, 2], [2, 3], [2, 7]]
maximum_val = max(my_list)[0]
for item in my_list:
if item[0] == maximum_val:
print(my_list.index(item))
break
输出:
1
有人可以在不导入外部库的情况下,为当前代码提供更多时间优化的形式吗?
你要求max()
找到最大的名单,[2, 7]
比[2, 3]
大,因为名单是ordered lexicographically。
不要比较列表。使用key
函数选择第一个整数:
max(my_list, key=lambda nested: nested[0])
这将返回my_list
中的元素,key
函数返回的值为最大值。如果多个元素具有相同的最大值,则返回第一个这样的元素:
>>> my_list = [[1, 2], [2, 3], [2, 7]]
>>> max(my_list, key=lambda nested: nested[0])
[2, 3]
接下来,要获取该元素的索引,请将索引传递给max()
,并让key
函数将这些索引映射到要比较的值:
max(range(len(my_list)), key=lambda idx: my_list[idx][0])
因此,这需要从0到(但不包括)my_list
列表的长度的整数序列,然后使用key
函数返回my_list
列表中该索引处元素的第一个整数:
>>> my_list = [[1, 2], [2, 3], [2, 7]]
>>> max(range(len(my_list)), key=lambda idx: my_list[idx][0])
1