使用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序列匹配,但无法再找到它)
答案 0 :(得分:1)
s1 = set(l)
s2 = set(sublist)
s1.intersection(s2)
[out]set(['as', 'it'])
答案 1 :(得分:1)
您的问题与生物学中的序列对齐有关,这通常是动态编程方法解决的。你也可以看看NLP中使用的模式匹配算法,自然语言工具包(nltk)应该讨论我猜的一些相关问题。