python - 用通配符匹配 2 个列表的算法

标签 python string algorithm pattern-matching string-matching

我正在寻找一种匹配 2 个列表的有效方法,一个包含完整信息,一个包含通配符。我已经能够使用固定长度的通配符来执行此操作,但现在我正在尝试使用可变长度的通配符来执行此操作。

因此:

match( ['A', 'B', '*', 'D'], ['A', 'B', 'C', 'C', 'C', 'D'] )

只要所有元素在两个列表中的顺序相同,就会返回 True。

我正在处理对象列表,但为简单起见,在上面使用了字符串。

最佳答案

[编辑以证明在 OP 对比较对象发表评论后没有 RE]

看来您没有使用字符串,而是比较对象。因此,我给出了一个明确的算法——正则表达式为字符串提供了一个很好的解决方案,不要误会我的意思,但从你对问题的评论来看,似乎一个明确的、简单的算法可能会让你的事情变得更容易.

事实证明,这可以用比 this previous answer 简单得多的算法来解决。 :

def matcher (l1, l2):
    if (l1 == []):
        return (l2 == [] or l2 == ['*'])
    if (l2 == [] or l2[0] == '*'):
        return matcher(l2, l1)
    if (l1[0] == '*'):
        return (matcher(l1, l2[1:]) or matcher(l1[1:], l2))
    if (l1[0] == l2[0]):
        return matcher(l1[1:], l2[1:])
    else:
        return False

关键思想是当你遇到通配符时,你可以探索两种选择:

  • 要么在包含通配符的列表中前进(并考虑通配符匹配到现在为止的任何内容)
  • 或在不包含通配符的列表中前进(并考虑列表头部的任何内容都必须与通配符匹配)。

关于python - 用通配符匹配 2 个列表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8847257/

相关文章:

c - 删除<img></img>标签的内容

c# - 如何在字符串值的中间添加空格?

algorithm - Flood Fill算法的非递归实现?

java - k-means 在 mapreduce 中对特定集群中的文件进行分组

python - 在python中以给定的速率执行特定语句

python - SQLAlchemy 子查询,用于从另一个表中求和值

javascript - 将字符串拆分为字符串列表

java - 该算法查找 Anagrams 的时间复杂度和空间复杂度是多少?

Python 导入与直接执行

python - 在 Python ctypes 中转换为数组