搜索/识别列表中的子列表的最佳方法,允许插入

时间:2013-08-23 14:04:53

标签: python list matching

使用Python,我想匹配列表中可能填充特定模式的所有子列表,

例如:

 l = ['dummy', ',', 'as', 'it', 'is', 'an', 'example', '.', 
     'as', 'we', 'assume', 'it', 'is', '.', 
      'as', 'to', 'do', 'some', '.']

 sublist = ['as', '*', 'it']

mySub(l, sublist)提供=> [['as', 'it'], ['as', 'we', 'assume', 'it'], ['as', 'it', 'is', 'an', 'example', '.', 'as', 'we', 'assume', 'it']]

或其他例子:

mySub(l, ['as', '*', 'it', '*', 'example'])提供=> [['as', 'it', 'is', 'an', 'example'], ] mySub(l, ['as', '*', 'it', 'is'])提供=> [['as', 'it', 'is'], ['as', 'it', 'is', 'an', 'example', '.', 'as', 'we', 'assume', 'it', 'is'], ['as', 'we', 'assume', 'it', 'is']]

实际上我的问题更复杂,因为l将是列表的列表,而sublist也必须在排名的基础上匹配它的某些部分。但这是为了模式化我遇到的主要困难是如何使用Python进行这种有效的匹配。 (所以用一些简单的正则表达式匹配来解决这个问题对我没有帮助)

请注意' *'就像正则表达式一样,这意味着我们可以跳过一些项目。 即使不清楚,我也需要有所有可能的子列表,这就是为什么有些人会像贪婪一样重复匹配。

如果您有任何线索/链接/有趣的想法请

最好的问候

(我记得有一些算法与生物信息学/ dna序列匹配,但无法再找到它)

2 个答案:

答案 0 :(得分:1)

s1 = set(l)
s2 = set(sublist)
s1.intersection(s2)
[out]set(['as', 'it'])

答案 1 :(得分:1)

您的问题与生物学中的序列对齐有关,这通常是动态编程方法解决的。你也可以看看NLP中使用的模式匹配算法,自然语言工具包(nltk)应该讨论我猜的一些相关问题。