第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

元芳怎么了 2023-02-07 09:38:07
假設(shè)我們有以下代碼: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"]本質(zhì)上,我們有一些值的排序列表。這些值也是另一個(gè)字典的值。然后關(guān)聯(lián)的鍵可能(或可能不)在另一個(gè)列表中。假設(shè)我對(duì)來自的數(shù)字“5000”感興趣,val_list并且我想找到最近的不包括自身的重要字母。我不知道如何實(shí)現(xiàn)查找最近的重要字母。因?yàn)樵谶@種情況下,最近的有效字母實(shí)際上"k": 5002是距離 2 個(gè)索引位置"i":5000。"h":4900不是一個(gè)可接受的答案,因?yàn)?|4900-5000| 之間的絕對(duì)差異 = 100 而 |5002-5000| = 2。在程序測試 4900 更接近之前,我無法弄清楚如何獲得一些東西來測試 5002 是否更接近 5000。由于 5002 和 4900 的密鑰都在 中sig_letters,因此應(yīng)首先測試 5002 以打破循環(huán)。
查看完整描述

2 回答

?
炎炎設(shè)計(jì)

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

>>> 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()是一個(gè)動(dòng)態(tài)的字典視圖對(duì)象。隨著基礎(chǔ)字典的變化,它是快速和更新的。

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


查看完整回答
反對(duì) 回復(fù) 2023-02-07
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

看起來所有三個(gè)集合都已排序(在字典的情況下,'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


查看完整回答
反對(duì) 回復(fù) 2023-02-07
  • 2 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)