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

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

忽略排除條件的遞歸函數

忽略排除條件的遞歸函數

BIG陽 2022-07-12 09:46:58
我可能很厚,但我很困惑為什么這個遞歸函數忽略了我提供的排除條件。在下面的代碼中,我取一個基值,并從另一個函數中獲取對應值的列表。列表中的每個值都需要被處理,并且需要獲取它自己的對應值列表,為此會發生相同的過程,直到處理完所有相關值。為避免兩次處理任何值,我在其中添加了一個條件the_loop,旨在僅處理尚未處理的值。每次處理一個值時,它都會被添加到排除列表中,并且應該跳過循環。def the_recursive_func(key):   values = get_values(key) # values is a list of numbers   processed_values = {}   def the_loop(list_of_values):      not_processed = [v for v in list_of_values if v not in processed_values.keys()]      for v in not_processed:          processed = process_value(v)          processed_values[v] = processed          new_values_list = get_values(v)          the_loop(new_values_list)   the_loop(values)   return processed_values相反,我兩次處理了很多值。我正在努力看看這是哪里出了問題。如果我將 for 循環更改為:      for v in not_processed:          if v in processed_values.keys():             continue          processed = process_value(v)          processed_values[v] = processed          new_values_list = get_values(v)          the_loop(new_values_list)然后我得到了我正在尋找的結果,但是 A)這是意大利面條,并且 B)我缺少一些基本的東西,為什么初始代碼不起作用。
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

您只是在函數開頭排除值。如果您需要排除在循環的早期迭代中處理的值(可能在遞歸中),則需要在每次循環中進行測試。


    def the_loop(list_of_values):

        for v in list_of_values:

            if v in processed_values:

                continue

            processed = process_value(v)

            processed_values[v] = processed

            new_values_list = get_values(v)

            the_loop(new_values_list)


查看完整回答
反對 回復 2022-07-12
  • 1 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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