为了账号安全,请及时绑定邮箱和手机立即绑定

忽略排除条件的递归函数

忽略排除条件的递归函数

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 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信