亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在排序列表中找到條件最近值

如何在排序列表中找到條件最近值

元芳怎么了 2023-02-07 09:38:07
假設我們有以下代碼:val_list = [1000,2000,2500,3200,4000,4200,4800,4900,5000,5001,5002,5003]val_dict = {"a":1000,"b":2000,"c":2500,"d":3200,"e":4000,"f":4200,"g":4800,"h":4900,"i":5000,"j":5001,"k":5002,"l":5003}sig_letters = ["a","b","d","f","h","i","k","l"]本質上,我們有一些值的排序列表。這些值也是另一個字典的值。然后關聯的鍵可能(或可能不)在另一個列表中。假設我對來自的數字“5000”感興趣,val_list并且我想找到最近的不包括自身的重要字母。我不知道如何實現查找最近的重要字母。因為在這種情況下,最近的有效字母實際上"k": 5002是距離 2 個索引位置"i":5000。"h":4900不是一個可接受的答案,因為 |4900-5000| 之間的絕對差異 = 100 而 |5002-5000| = 2。在程序測試 4900 更接近之前,我無法弄清楚如何獲得一些東西來測試 5002 是否更接近 5000。由于 5002 和 4900 的密鑰都在 中sig_letters,因此應首先測試 5002 以打破循環。
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您可以將 dict 過濾為僅包含在sig_letters且值不等于查詢值的條目。使用理解,然后使用minwith aabs作為關鍵函數來查找感興趣的字典條目:

>>> x=5000
>>> min({k:v for k,v in val_dict.items() if k in sig_letters and v!=x}.items(), key=lambda e: abs(x-e[1]))
('k', 5002)

在 Python 3.x 中,.items()是一個動態的字典視圖對象。隨著基礎字典的變化,它是快速和更新的。

如果您使用的是 Python 2.7,請使用.viewitems()而不是 items() (并考慮更新到 Python 3.x ...)


查看完整回答
反對 回復 2023-02-07
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

看起來所有三個集合都已排序(在字典的情況下,'a' 的值總是小于 'b' 的值,依此類推)。這讓事情變得非常簡單 - 看看字母的兩邊sig_letters



def absolute_difference(a: int, b: int) -> int:

    return a - b if a > b else b - a


def nearest(val: int) -> str:

    global val_list, val_dict, sig_letters


    exact_key = None


    # Find the corresponding key in val_dict (catch not found)

    for key, value in val_dict.items():

        if value == val:

            exact_key = key


    # Find exact_key's index in sig_letters  (catch ValueError)

    exact_index = sig_letters.index(exact_key)


    # Get values to left and right (catch out of bounds)

    left = sig_letters[exact_index-1]

    right = sig_letters[exact_index+1]

    left_val = val_dict[left]

    right_val = val_dict[right]



    if absolute_difference(left_val, val) < absolute_difference(right_val, value):

        return left

    else: 

        return right


查看完整回答
反對 回復 2023-02-07
  • 2 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號