在比较函数中,我基本上是在一个长二进制对象(例如,aaaAAAbbbBBB)中寻找一个模式(例如“AAA”)
我正在通过文件向后工作(我知道匹配将比开始更接近结尾),向正在检查匹配的变量添加 1 个字节:
1. aaaAAAbbbBB[B]
2. aaaAAAbbbB[BB]
3. aaaAAAbbb[BBB]
4. aaaAAAbb[bBBB]
5. ...
n. aaa[AAAbbbBBB]
找到匹配,偏移量 = -n
鉴于我知道我的模式是 3 个元素长,我想知道我是否可以简单地对搜索变量进行窗口化而不是增加它 - 当匹配是列表中的 +1,000,000 个元素时它会变得非常慢 - 相同数据的窗口化视图将是:
1. aaaAAAbbb[BBB]
2. aaaAAAbb[bBB]B
3. aaaAAAb[bbB]BB
4. aaaAAA[bbb]BBB
5. ...
n. aaa[AAA]bbbBBB
找到匹配,偏移量 = -n
我目前的搜索看起来像:
if marker in f_data[-counter:]:
offset = (len(f_data)-counter)+len(marker)
return offset
在 MATLAB 中,我会使用数组寻址在数组中移动(例如调用 window = a[5:8]、window = a[4:7] 等),但我认为这在 Python(2.7)中是不可能的
我可以看到一些使用滑动窗口的建议,(Python 中的滚动或滑动窗口迭代器- 这看起来很接近)但我看不到如何实现它,或者它们引用了我不知道如何的库利用。
是否有内置功能可以执行此操作?