0

使用 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 进行这种有效的匹配。(所以用一些简单的正则表达式匹配解决这个问题对我没有帮助)

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

如果你们有任何线索/链接/有趣的想法,请

此致

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

4

2 回答 2

1

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

于 2013-08-23T18:27:11.080 回答
1
s1 = set(l)
s2 = set(sublist)
s1.intersection(s2)
[out]set(['as', 'it'])
于 2013-08-23T14:08:36.113 回答