当前位置:  开发笔记 > 编程语言 > 正文

什么更快?最小列表然后索引最小值,vs迭代列表

如何解决《什么更快?最小列表然后索引最小值,vs迭代列表》经验,为你挑选了1个好方法。

我正在使用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的第一个元素.指数.而在第二个选项中,它只会遍历列表一次.

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

注意,我需要找到最低和相应的最低值,我不只是找到最低值,这样我才能找到对应的最低点.



1> Martijn Piet..:

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

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

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

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

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

这将选择最小值list1,并将该值与相应的值一起list2返回.如果这是Python 2,请使用该future_builtins.zip()函数以便将来兼容并避免在内存中构建整个配对列表:

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

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有