我有一個相當複雜的遊戲相關問題。這是問題的簡化版本。我有一個「好」號碼的清單。尋找有效數字的距離
100
101
102
104
105
106
107
220
221
289
290
客戶有3個數字103,299和999
103是最好的選擇,因爲它是最接近好號碼的選擇。由於與好數字的距離,299比999更好。
我猜python沒有任何內置函數來計算「距離」。但是Python之前讓我感到吃驚。
我需要找到每個值的距離。例如,
103 0.9
299 0.2
999 0.1
我試過機器學習亞馬遜,但它返回所有數字相同的權重。
更新:
mylist="""100
101
102
104
105
106
107
220
221
289
290
542
544
"""
z = """103
299
999
108
543
"""
finallist=[]
for y in z.split():
newlist=[]
for i in mylist.split():
diff=int(y)-int(i)
newlist.append(abs(diff))
finallist.append((y, min(newlist)))
finallist
[('103', 1), ('299', 9), ('999', 455), ('108', 1), ('543', 1)]
1)103和108是按面值。但103是更相關的,因爲它是102和104之間,我想增加103
2)103重量也連續系列的一部分,因此比543更重要的是,可以542和544
之間處於3)亞馬遜ML做所有這些計算並提供「分數」。但這在這種情況下不起作用。
更新2:
除去min函數並保存所有的值到列表
# finallist.append((y, newlist))
計數出現的次數爲每個值。
from collections import Counter
for i, d in finallist:
c=Counter(d)
print i, c.most_common()
103 [(1, 2), (2, 2), (3, 2), (4, 1), (117, 1), (118, 1), (439, 1), (441, 1), (186, 1), (187, 1)]
299 [(192, 1), (193, 1), (194, 1), (195, 1), (197, 1), (198, 1), (199, 1), (9, 1), (10, 1), (78, 1), (79, 1), (243, 1), (245, 1)]
999 [(897, 1), (898, 1), (899, 1), (709, 1), (710, 1), (455, 1), (457, 1), (778, 1), (779, 1), (892, 1), (893, 1), (894, 1), (895, 1)]
108 [(1, 1), (2, 1), (3, 1), (4, 1), (6, 1), (7, 1), (8, 1), (112, 1), (113, 1), (434, 1), (436, 1), (181, 1), (182, 1)]
543 [(1, 2), (322, 1), (323, 1), (436, 1), (437, 1), (438, 1), (439, 1), (441, 1), (442, 1), (443, 1), (253, 1), (254, 1)]
103是更相關的,因爲它相較於108和543
具有2次出現的1,2和3的我試圖以該順序進行排序:
103 because it has highest number of double occurances
108 because it is part of contiguous list
543 because of the instance of double occurance
299 because closer to list
999 least relevant
如果是不可能的,如果我得到103,543,108這是確定...
更新3:
我嘗試了答案中建議的平均值而不是最小值。
# finallist.append((y, sum(newlist)/len(mylist)))
現在的訂單是108,103,299,543和999這是不是預期的。如果非常大的數字被添加到列表中,這可能會改變。
[('103', 28.923076923076923),
('299', 39.07692307692308),
('999', 195.30769230769232),
('108', 28.634615384615383),
('543', 81.34615384615384)]
最後更新:
我會簡單地計算總,然後排序。這不會返回預期的結果,但我會接受這個答案,因爲我不知道如何根據距離爲每個值分配「權重」。
finallist.append((y, sum(newlist)))
排序(finallist,鍵=拉姆達X:X [1])
[( '108',1489),( '103',1504),( '299',2032), ('543',4230),('999',10156)]
你如何定義距離? – svs
那麼,更大的「距離」是「更接近」? –
是的。更大的距離更近。但這並不是硬性規定。我需要做的就是排序並取第一個或最後一個數字。 – shantanuo