我正在寻找一种匹配 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/