我有一個值total_weight = 212.0,我的程式中有一個部分試圖找到確切的值,但我的串列中沒有確切的重量。
所以我想得到最接近的值。在這個例子中,它將是 我已經試過用min(),但我沒能使它作業。
uj5u.com熱心網友回復: 為了找到最近的值,使用 為了找到較高和較低的值,進行排序并找到第一個較高值的索引,然后取其和前一個: (處理邊緣情況會增加復雜性 -- 如果有是個完全匹配的怎么辦? 如果目標比所有的值都高或低呢? 等等。)
標籤: 下一篇:子查詢中的動態資料庫[(200.0, (2.5, 5.0, 10.0, 15.0, 45.0)), (200.0, (2.5, 5.0, 10.0, 25.0, 35.0)), (220.0, (2.5, 5.0, 10.0, 25.0, 45.0))
List = [ (180.0, (2.5, 5.0, 10.0, 15.0, 35.0)), (200.0, (2.5, 5.0, 10.0, 15.0, 45.0)), (200.0, (2.5, 5.0, 10.0, 25.0, 35.0)), (220.0, (2.5, 5.0, 10.0, 25.0, 45.0)) (240. 0, (2.5, 5.0, 10.0, 35.0, 45.0)), (210.0, (2.5, 5.0, 15.0, 25.0, 35.0)), (230.0, (2.5, 5.0, 15.0, 25.0, 45.0)), (250.0, (2.5, 5.0, 15.0, 35.0, 45.0)), (270.0, (2.5, 5.0, 25. 0, 35.0, 45.0)), (220.0, (2.5, 10.0, 15.0, 25.0, 35.0)), (240.0, (2.5, 10.0, 15.0, 25.0, 45.0)), (260.0, (2.5, 10.0, 15.0, 35.0, 45.0)), (280.0, (2.5, 10.0, 25.0, 35.0, 45. 0)),(290.0,(2.5,15.0,25.0,35.0,45.0)),(225.0,(5.0,10.0,15.0,25.0,35.0)),(245.0,(5.0,10.0,15.0,25.0,45.0)),(265.0,(5.0,10.0,15.0,35.0,45.0))】/codemin與一個key函式,該函式給出了與目標的距離:>>> weights = [
(180.0, (2.5, 5. 0, 10.0, 15.0, 35.0))。)
(200.0, (2.5, 5。 0, 10.0, 15.0, 45.0))。)
(200.0, (2.5, 5。 0, 10.0, 25.0, 35.0))。)
(220.0, (2.5, 5。 0, 10.0, 25.0, 45.0))。)
(240.0,(2.5,5. 0, 10.0, 35.0, 45.0))。)
(210.0,(2.5,5. 0, 15.0, 25.0, 35.0))。)
(230.0,(2.5,5. 0, 15.0, 25.0, 45.0))。)
(250.0, (2.5, 5。 0, 15.0, 35.0, 45.0))。)
(270.0,(2.5,5. 0, 25.0, 35.0, 45.0))。)
(220.0, (2.5, 10。 0, 15.0, 25.0, 35.0))。)
(240.0, (2.5, 10。 0, 15.0, 25.0, 45.0))。)
(260.0, (2.5, 10. 0, 15.0, 35.0, 45.0))。)
(280.0, (2.5, 10。 0, 25.0, 35.0, 45.0))。)
(290.0, (2.5, 15. 0, 25.0, 35.0, 45.0))。)
(225.0, (5.0, 10。 0, 15.0, 25.0, 35.0))。)
(245.0, (5.0, 10。 0, 15.0, 25.0, 45.0))。)
(265.0, (5.0, 10。 0, 15.0, 35.0, 45.0))。)
]
>>> total_weight = 212.0。
>>> min(weights, key=lambda w: abs(w[0] - total_weight)
(210.0, (2.5, 5. 0, 15.0, 25.0, 35.0)
weights.sort()
higher = next(i for i in range(len(weights)) if weights[i][0] > total_weight)
weights[higher-1: higher 1]
[(210.0, (2.5, 5。 0, 15.0, 25.0, 35。 0),(220.0,(2.5,5。 0, 10.0, 25.0, 45.0)) ]
