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

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

將不同的操作集與 Python 中的數(shù)字列表相結(jié)合

將不同的操作集與 Python 中的數(shù)字列表相結(jié)合

翻翻過去那場雪 2022-06-14 15:07:00
假設(shè)我們有一個(gè) Python 中的數(shù)字列表:l = [50,10,20,30,40]我想要:查看以不同順序?qū)?shù)字與 + 和 - 組合的結(jié)果,找出哪一組 + 和 - 組合將提供最接近 0 的結(jié)果。例如,假設(shè)我們有一組操作s1 = [-,-,-,+]那么如果我們將 s1 應(yīng)用于 l 我們會(huì)得到50-10-20-30+40 = 30如果我們申請(qǐng)s2 = [+,+,-,-]那么我們會(huì)有50+10+20-30-40 = 10(因此,在這種情況下,s2 是最佳選擇,因?yàn)樗罱咏?0)我能做些什么來解決這個(gè)問題?
查看完整描述

2 回答

?
回首憶惘然

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

要將算術(shù)運(yùn)算符號(hào)轉(zhuǎn)換為 python 函數(shù),您可以使用dict它將符號(hào)與operator模塊中的函數(shù)匹配:


import operator


operations_map = {

    "+": operator.add,

    "-": operator.sub,

    "*": operator.mul,

    "/": operator.truediv

}

要處理整數(shù)和運(yùn)算符列表,您可以使用 next 函數(shù):


def process(numbers, operations):

    if len(numbers) - 1 != len(operations):

        raise ValueError(f"There're {len(numbers)} numbers and {len(operations)} operations.")

    result = numbers[0]

    for i in range(1, len(numbers)):

        if operations[i - 1] in operations_map:

            result = operations_map[operations[i - 1]](result, numbers[i])

        else:

            raise ValueError(f"\"{operations[i - 1]}\" is not valid operation.")

    return result

用法:


process([50, 10, 20, 30, 40], ["+", "-", "+", "+"])

要查找結(jié)果最接近零的操作序列,您可以使用生成運(yùn)算符的排列itertools.permutations()并使用以下方法查找最小結(jié)果min():


from itertools import permutations


def closest_to_zero(numbers, operations):

    return min(

        ((process(numbers, current), tuple(current)) for current in permutations(operations)), 

        key=lambda x: abs(x[0])

    )


value, chain = closest_to_zero([50, 10, 20, 30, 40], ["+", "-", "+", "+"])

要從一組可能的運(yùn)算符中獲取所有可能的組合,您可以使用itertools.product(),其中repeat參數(shù)將設(shè)置為len(numbers) - 1:


from itertools import product


def closest_to_zero_patched(numbers, operations):

    return min(

        ((process(numbers, current), tuple(current)) for current in

            product(operations, repeat=len(numbers) - 1)),

        key=lambda x: abs(x[0])

    )


value, chain = closest_to_zero_patched([50, 10, 20, 30, 40], {"+", "-"})


查看完整回答
反對(duì) 回復(fù) 2022-06-14
?
哆啦的時(shí)光機(jī)

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

如果你想要一個(gè)近乎單一的班輪(不一定是最有效的班輪):


您可以使用Truefor+和Falsefor對(duì)運(yùn)算符列表進(jìn)行編碼,并為列表的第一個(gè)元素-添加一個(gè)附加值(如果您總是希望添加此元素),以便您的列表如下所示:Truels1 = [-,-,-,+]


s1 = [True, False, False, False, True]


然后使用包中的compress函數(shù)itertools你得到你的結(jié)果:


from itertools import compress


sum(compress(l, s1)) - sum(compress(l, [not i for i in s1]))

它本質(zhì)上首先將與 's 關(guān)聯(lián)的所有元素相加+,然后減去與-'s 關(guān)聯(lián)的所有元素。


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

添加回答

舉報(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)