簡體   English   中英

如何讓我的代碼更快地找到最小值?

[英]How can I make my code to find the minimum faster?

我有一個關於如何以我的方式在列表中找到最小值的問題:

我有一個很大的列表,其中每條記錄都是這樣的:

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

但是列表中的第一個和最后一個記錄不包含最后一個數字:

例如:

['22:00:09', '0026f88e557225333f01', '23', '37', '', '176', '0', '60', '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, size, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM