Python 检查是否满足所有列表元素的某个属性
给出了长度为n的二进制字符串列表,其中一些是码字 在主例程中,如果满足某些条件,我想向码字列表中添加一个元素。算法的相关部分可以写为:从一个列表开始,只向该列表添加一个码字元素(从所有可能的字符串列表中),如果它与第一个码字至少有d距离,那么为了添加下一个码字,我们必须在原始列表中找到第一个这样的字符串,与已添加的两个码字的距离至少为d。第四个元素也是如此——它到已经找到的码字的距离至少应该是d。等等 使用递归,我编写了以下代码,以“RuntimeError:调用Python对象时超出了最大递归深度”结尾 我做错了什么?(我是python新手)Python 检查是否满足所有列表元素的某个属性,python,recursion,Python,Recursion,给出了长度为n的二进制字符串列表,其中一些是码字 在主例程中,如果满足某些条件,我想向码字列表中添加一个元素。算法的相关部分可以写为:从一个列表开始,只向该列表添加一个码字元素(从所有可能的字符串列表中),如果它与第一个码字至少有d距离,那么为了添加下一个码字,我们必须在原始列表中找到第一个这样的字符串,与已添加的两个码字的距离至少为d。第四个元素也是如此——它到已经找到的码字的距离至少应该是d。等等 使用递归,我编写了以下代码,以“RuntimeError:调用Python对象时超出了最大递归
您的第二个
break
将永远无法到达——Pythonbreak
语句会立即从最里面的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;