尝试查找下一个最大值时出现 Python 算法错误

标签 python algorithm file output

我编写了一个算法来扫描“ID”的文件并将该值与整数 i 的值进行比较(我已将该整数转换为字符串以进行比较,并且我已经修剪了“\n”行中的前缀)。该算法比较文件中每一行(每个 ID)的这些值。如果它们相等,则算法将 i 增加 1,并使用新的 i 值进行递归。如果值不相等,它将与文件中的下一行进行比较。它会一直这样做,直到它有一个不在文件中的 i 值,然后返回该值以用作下一条记录的 ID。

我的问题是我有一个 ID 为 1、3、2 的文件,因为我删除了 ID 为 2 的记录,然后创建了一个新记录。这表明算法工作正常,因为它为新记录提供了之前删除的 ID 2。但是,当我创建新记录时,下一个 ID 是 3,导致我的 ID 列表显示为:1,3,2,3 而不是 1,3,2,4。下面是我的算法,带有 print() 命令的结果。我可以看到哪里出了问题,但无法弄清楚原因。有什么想法吗?

算法:

def _getAvailableID(iD):
        i = iD
        f = open(IDFileName,"r")
        lines = f.readlines()
        for line in lines:
            print("%s,%s,%s"%("i=" + str(i), "ID=" + line[:-1], (str(i) == line[:-1])))
            if str(i) == line[:-1]:
                i += 1
                f.close()
                _getAvailableID(i)
        return str(i)

输出: (运行算法以查找 ID 应为 4 的记录的适当 ID 时的输出):

i=1,ID=1,True
i=2,ID=1,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False

最佳答案

我认为你的程序失败是因为你需要改变:

_getAvailableID(i)

 return _getAvailableID(i)

(此时递归函数找到了被丢弃的正确答案。)

但是,将您看到的所有 id 简单地放入一个集合中可能会更好,这样可以提高程序的效率。

例如在伪代码中:

S = set()
loop over all items and S.add(int(line.rstrip()))
i = 0
while i in S:
   i += 1
return i

关于尝试查找下一个最大值时出现 Python 算法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957020/

相关文章:

algorithm - 将 "sum"和 "multiply"运算符放在给定整数列表的元素之间,以便表达式产生指定值

algorithm - 从随机位序列生成随机整数

Perl 脚本在信号处理程序中重新打开文件

python - Python 处理二进制文件有危险吗?

Python:用于计算字符串中唯一字母的字典

python - Matplotlib 毫秒在 x 轴上打勾

python - 有没有办法从 python 中获取数据库的模式?

java - Python "myfirst.py"失败到 "import mySecond.py"。两种资源都在同一个包中 "test"

c - dfs 迭代和 dfs 递归的不同输出

c++ - 使用 SFML 等图形库时如何嵌入字体和其他图像文件