繁体   English   中英

模式匹配列表a与列表b

[英]pattern match list a with list b

我对Python相当陌生。

我有两个清单

清单A [a,b,c]
清单B [c,d,e,f,g,h]

我想重新匹配(或重新搜索)列表B中的列表A变量。如果列表B中不存在列表A中的任何变量,则应返回false。

在上面的列表中,它应该返回false。

我可以尝试以下循环吗?

对于listA中的x:
如果re.match(listB,x)
返回假

您可以使用all

>>> lis1 =  ['a', 'b', 'c'] 
>>> lis2 =  ['c','d','e','f','g','h']
>>> all(x in lis2 for x in lis1)
False

如果lis2很大,则首先将其转换为set ,因为集合提供了O(1)查找:

>>> se = set(lis2)
>>> all(x in se for x in lis1)
False

正则表达式不适用于列表。

这听起来像是集的工作,而不是正则表达式:

 set(listA) & set(listB) == set(listA)

以上说明:如果两个集合的交集与第一集合的元素相同,则第二集合中也存在第一集合的所有元素。 或者,正如乔恩(Jon)所指出的,基于集合差异的解决方案也是可行的:

 not set(listA) - set(listB)

上面的状态:如果第一组中没有第二组中不存在的元素,那么条件成立(对双重否定很抱歉!)

只需遍历列表,然后使用all

>>> llist = "a b c".split()
>>> rlist = "c d e".split()
>>> all(re.match(left, right) for left in llist for right in rlist)
False

如果llist包含“ true”正则表达式,这只会引起问题:

>>> llist = [r"^.+foo$", r"^bar.*$"]
>>> rlist = ["foozzz", "foobar"]
>>> all(re.match(left, right) for left in llist for right in rlist)
False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM