Python 检查是否满足所有列表元素的某个属性

Python 检查是否满足所有列表元素的某个属性,python,recursion,Python,Recursion,给出了长度为n的二进制字符串列表,其中一些是码字 在主例程中,如果满足某些条件,我想向码字列表中添加一个元素。算法的相关部分可以写为:从一个列表开始,只向该列表添加一个码字元素(从所有可能的字符串列表中),如果它与第一个码字至少有d距离,那么为了添加下一个码字,我们必须在原始列表中找到第一个这样的字符串,与已添加的两个码字的距离至少为d。第四个元素也是如此——它到已经找到的码字的距离至少应该是d。等等 使用递归,我编写了以下代码,以“RuntimeError:调用Python对象时超出了最大递归

给出了长度为n的二进制字符串列表,其中一些是码字

在主例程中,如果满足某些条件,我想向码字列表中添加一个元素。算法的相关部分可以写为:从一个列表开始,只向该列表添加一个码字元素(从所有可能的字符串列表中),如果它与第一个码字至少有d距离,那么为了添加下一个码字,我们必须在原始列表中找到第一个这样的字符串,与已添加的两个码字的距离至少为d。第四个元素也是如此——它到已经找到的码字的距离至少应该是d。等等

使用递归,我编写了以下代码,以“RuntimeError:调用Python对象时超出了最大递归深度”结尾

我做错了什么?(我是python新手)


您的第二个
break
将永远无法到达——Python
break
语句会立即从最里面的
for
while
循环中中断。这意味着您的外部
for
循环仍在运行

解决这个问题应该可以避免大量的递归调用

关于半相关的样式指南主题:

  • 在Python中不应该使用分号
  • 如果语句的条件是不必要的,则应避免使用括号括起来,除非您使用括号将条件分散到多行
  • not
    是一个运算符,而不是一个函数——使用
    not x
    ,而不是
    not(x)

非常感谢您的输入(和代码样式)。。。然而,即使删除第二个中断也似乎不起作用(这就是我添加它的原因)。当然,删除第二个
中断并没有改变任何事情,它从一开始就没有执行过。看起来您想要中断最顶层的for循环,这相当于中断函数。用
return
语句替换两个
break
。不幸的是,这也不起作用。。对第一个函数调用有效的代码是:对于范围(n)中的i:if(汉明距离(代码[0],字符串[i])>=d):code.append(字符串[i])break
def helper(n,d,strings,codes,lastIndex):
    for i in range(lastIndex,n):
        distanceCheckSatisfied = True
        for j in range(len(codes)):
            if ( not(hammingDistance(codes[j],strings[i]) >= d) or not(distanceCheckSatisfied) ):
                distanceCheckSatisfied = False
            if (distanceCheckSatisfied):
                codes.append(strings[i])
                helper(n,d,strings,codes,i)
                break;
                break;