Skip to main content
 首页 » 编程设计

python之什么更快列表的最小值然后是最小值的索引,vs 遍历列表

2025年05月04日12lhb25

我正在使用 python,我有一个列表列表,比如 list1,其中每个内部列表都有 2 个元素。 我有第二个列表,比如 list2。 list1的第i个元素对应list2的第i个元素。

查找是否更快:

lowest = min(list1, key=lambda x: x[1]) 
index = list1.index(lowest) 
correspondingLowest = list2[index] 

还是更快:

lowest = list1[0] 
lowestValue = sys.maxint 
saveIndex = 0 
for i in range(len(list1)): 
    if list1[i][1] < lowestValue: 
        lowest = i 
        saveIndex=i 
correspondingLowest = list2[saveIndex] 

我不知道内置函数 min(list) 和 list.index 是如何工作的,但我假设它们都涉及遍历整个列表,在 min 的情况下,直到列表中的第 index 个元素.index 的情况。而在第二个选项中,它只会遍历列表一次。

我的 list1 和 list2 中至少有 100000 个元素,因此任何差异都会很明显。我希望还有其他可能更快的选择吗?

请注意,我需要找到 lowest 和 correspondingLowest 的值,我不只是找到 lowest 以便找到 correspondingLowest。

请您参考如下方法:

使用 enumerate() function 生成索引并使用 min() 的 key 参数函数来确保它从结果(索引,元素)元组中找到最小的列表值:

min_index, min_value = min(enumerate(list1), key=lambda ie: ie[1][1]) 

找到最小值然后查找索引必须扫描列表两次,而用 C 实现的 min() 循环将击败 Python 循环。

如果您所做的只是将索引从一个列表映射到另一个列表,您也可以只压缩这两个列表:

min1, min2 = min(zip(list1, list2), key=lambda ee: e[0][1]) 

这会选择 list1 中的最小值,并返回该值以及 list2 中的对应值。如果这是 Python 2,请使用 future_builtins.zip() function为了将来的兼容性并避免在内存中构建整个配对列表:

try: 
    # Python 2 
    from future_builtins import zip 
except ImportError: 
    # Python 3, it is built-in 
    pass