这是将“字符串包含子字符串”问题推广到(更多)任意类型。
给定一个序列(例如列表或元组),确定另一个序列是否在其中的最佳方法是什么?作为奖励,它应该返回子序列开始的元素的索引:
示例用法(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/