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

2024-04-20 11:08:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

使用递归,我编写了以下代码,以“RuntimeError:maximum recursion depth exceeded while calling a Python object”结束

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

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;

Tags: 字符串inhelper元素距离列表forif
1条回答
网友
1楼 · 发布于 2024-04-20 11:08:26

您的第二个break将永远不会到达Python break语句,它会立即跳出最内部的forwhile循环。这意味着您的外部for循环仍在运行。你知道吗

解决这个问题应该可以避免大量的递归调用。你知道吗

关于一个半相关的风格指南主题:

  • 在Python中不应该使用分号。你知道吗
  • if语句的条件周围的括号是不必要的,应该避免使用括号,除非您使用括号将条件分布到多行。你知道吗
  • not是运算符,而不是函数使用not x,而不是not(x)。你知道吗

相关问题 更多 >