列表的模式匹配算法

时间:2016-02-02 21:38:46

标签: python pattern-matching

我在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]

是否有可以帮助我的图书馆?

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]

将来,写一个你想要达到的目标的定义总是一个好主意。这样,其他人可以更好地了解您,并且可以根据定义检查函数以查看它们是否正确。如果你学习更多数学,你会更好地了解如何做到这一点。组合学和数论是与计算机科学和编程密切相关的两个子领域。祝你好运!