首页 > 解决方案 > 如何使用python找到文件中连续数字的路径?

问题描述

我有一个包含 4000,000 条数据的文件。我开始用python编程。我想找到一条 7 比 1 到达的路径。但我有一些条件:

1.- 路径必须是下降的,例如:7, 6, 5....1(希望是连续的),但可以是 7,6,3,1。主要目标是下降(第二列)。想象一下,线之间的底物必须= 1才能识别它们

2.- 路径不能上升。例如:如果我在 7、6、5..然后 6 不正确。下一个数字 5 必须是数字 4,或其他更低但没有更高的数字。我想象线之间的基板必须是-1才能识别它们

3.- 可以重复数字。例如,如果我在 7 中,我可以在 7 中有一些行在通过 6 之前就可以了。请记住,主要目标不是上升,而是下降。我想结果将是常数 0 或 1 。

4.- 如果其中一个条件为假,则:a) 重新开始,但在第一行中没有 7。我的意思是,如果有 7(文件中的第二个 7),则从下一行开始不是从 7 开始的路径,然后选择 6 行,依此类推,直到找到到达 1 的路径。 b) 或从进程中断的最后一行开始。(我不知道这个选项是否有效)

在简历中,我想找到从 7 到 1 的有效路径,以下降的方式,而不是上升。

输入文件是:

 1  6
 2  6
 3  6
 4  7
 5  7
 6  3
 7  3
 8  5
 9  7
 10 6

……等等等等。

输出文件:

45   7 
46   7
47   7
48   7 
49   6
50   6
51   5
52   5
53   4
54   3
55   2
56   1

或者

50      7
51      6
52      5
53      4
54      3
55      2
56      1

那么,您能指导我如何执行此过程吗?

非常感谢。

标签: pythonalgorithmpathnumbersconditional

解决方案


我会创建一个有限状态机,每个数字都有一个状态(7 个状态,1 到 7)。在每一行:

  • 如果当前行的数字是 7:创建机器的新实例(它将是一个类)并将其推送到“活动”自动机列表。
  • 调用.add_number(parsed_number)所有机器。此函数记住数字并返回三个可能结果之一:
    • 0 - 我不接受这个数字,把我扔掉(你必须对所有状态转换进行建模,这基本上是从较大数字到较小数字的任何转换)。
    • 1 - 我已接受号码,什么也不做。
    • 2 - 我已经接受了数字并且数字是1:打印我积累的东西并把我扔掉。

推荐阅读