python - 确定一个序列是否在另一个序列中的最佳方法?

标签 python algorithm sequence

这是将“字符串包含子字符串”问题推广到(更多)任意类型。

给定一个序列(例如列表或元组),确定另一个序列是否在其中的最佳方法是什么?作为奖励,它应该返回子序列开始的元素的索引:

示例用法(Sequence in Sequence):

>>> seq_in_seq([5,6],  [4,'a',3,5,6])
3
>>> seq_in_seq([5,7],  [4,'a',3,5,6])
-1 # or None, or whatever

到目前为止,我只是依靠蛮力,它看起来缓慢、丑陋和笨拙。

最佳答案

我支持 Knuth-Morris-Pratt 算法。顺便说一句,您的问题(和 KMP 解决方案)正是 Python Cookbook 中的配方 5.13第 2 版。您可以在 http://code.activestate.com/recipes/117214/ 找到相关代码

它在给定序列中找到所有正确的子序列,并且应该用作迭代器:

>>> for s in KnuthMorrisPratt([4,'a',3,5,6], [5,6]): print s
3
>>> for s in KnuthMorrisPratt([4,'a',3,5,6], [5,7]): print s
(nothing)

关于python - 确定一个序列是否在另一个序列中的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425604/

相关文章:

python - 在 Python 中更新 JSON 文件

返回较大列表中每 N 项列表的 Pythonic 方法

sequence - Z3py 是否支持 "String"和 "Sequence"

python - 初始化时嵌入 python 错误

python - 在具有大量输入的 for 循环上实现 Pool

c++ - 堆还是红黑树?

algorithm - 找到要携带的最大重量子集

java - 消费者没有将连接返回到我的数据库连接池

python - 计算列表中的顺序出现和

CSS nth-child 圆形样式