我在Python中尝试一些模式匹配。我有两个列表如下:
a = [1,2,3,4,5,6,7,8,9,1,3]
b = [3,4,5,2,1,7,8,9,1]
现在我想要检索一些常见的模式
c = [3,4,5,7,8,9,1]
是否有可以帮助我的图书馆?
答案 0 :(得分:2)
我一起为你砍了一些东西。这将返回最长的列表c,它是a和b的有序子列表。换句话说,可以通过删除a或b中的元素而不改变其顺序来获得的最长列表。
def match(a, b):
if len(a) == 0 or len(b) == 0:
return []
if a[0] == b[0]:
return [a[0]] + match(a[1:], b[1:])
return max(match(a, b[1:]), match(a[1:], b), key=len)
这是输出:
>>> a = [1,2,3,4,5,6,7,8,9,1,3]
>>> b = [3,4,5,2,1,7,8,9,1]
>>> match(a, b)
[3, 4, 5, 7, 8, 9, 1]
将来,写一个你想要达到的目标的定义总是一个好主意。这样,其他人可以更好地了解您,并且可以根据定义检查函数以查看它们是否正确。如果你学习更多数学,你会更好地了解如何做到这一点。组合学和数论是与计算机科学和编程密切相关的两个子领域。祝你好运!