如何使我的代码更快地找到最小值?

问题描述

我有一个问题,如何以自己的方式在列表中找到最小值:

我有一个很大的清单,其中的每条记录都是这样的:

['22:00:19','0026f88e557225333f01','23','37','','176.2','0','60','SOMETHING',3.318717958567554e-05]

但是列表中的第一个和最后一个记录不包含最后一个数字:

例如:

['22:00:09','176','SOMETHING']

我需要在我的函数的每次调用中找到最后一列3.318717958567554e-05的最小值及其索引。

这是我的代码:

def find_min(data,size,num):

    for index,i in enumerate(data):

        if index == 0 or index == data.__len__() -1: continue

        if index == 1:
            minimum = float(i[9])
            idx = index
            continue

        if float(i[9]) < minimum or float(i[9]) < num:
            minimum = float(i[9])
            idx = index

    return idx,minimum

num是用户定义的阈值,用于计算最小值。 (最小值应小于该值。) 这段代码可以正常工作,我可以找到想要的,但是如何使我的代码更快,因为我千次调用了此函数,并且使用了巨大的数据集,结果由于执行速度慢,执行时间非常长。 >

解决方法

摆脱所有if语句,并将数组切成您所关心的那些。

i[9]转换为仅浮动一次。

def find_min(data,size,num):
    idx = 1
    minimum = float(data[1][9])
    for index,i in enumerate(data[2:-1]):        
        f = float(i[9])
        if f < minimum or f < num:
            minimum = f
            idx = index + 2 # +2 because of the slicing
    
    return idx,minimum

或者如果列表太大以至于无法切成一片,只需遍历索引即可:

def find_min(data,num):
    idx = 1
    minimum = float(data[1][9])
    for index in range(2,len(data)-1):     
        f = float(data[index][9])
        if f < minimum or f < num:
            minimum = f
            idx = index
    
    return idx,minimum

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...