我可能很厚,但我很困惑為什么這個遞歸函數(shù)忽略了我提供的排除條件。在下面的代碼中,我取一個基值,并從另一個函數(shù)中獲取對應值的列表。列表中的每個值都需要被處理,并且需要獲取它自己的對應值列表,為此會發(fā)生相同的過程,直到處理完所有相關值。為避免兩次處理任何值,我在其中添加了一個條件the_loop,旨在僅處理尚未處理的值。每次處理一個值時,它都會被添加到排除列表中,并且應該跳過循環(huán)。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 循環(huán)更改為: 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條經(jīng)驗 獲得超10個贊
您只是在函數(shù)開頭排除值。如果您需要排除在循環(huán)的早期迭代中處理的值(可能在遞歸中),則需要在每次循環(huán)中進行測試。
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)
添加回答
舉報
0/150
提交
取消