我对Python很新。
我有两个列表
列出A [a,b,c]
列表B [c,d,e,f,g,h]
我想re.match(或re.search)列出列表B中的变量。如果列表A中的任何变量不在列表B中,它应该返回false。
在上面的列表中,它应该返回false。
我可以尝试循环如下吗?
表示listA中的x:
如果re.match(listB,x)
返回错误
答案 0 :(得分:3)
您可以使用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
正则表达式不适用于列表。
答案 1 :(得分:2)
这听起来像集合的工作,而不是正则表达式:
set(listA) & set(listB) == set(listA)
以上说明:如果两组的交集具有与第一组相同的元素,则第一组的所有元素也存在于第二组中。或者,正如Jon指出的那样,基于设定差异的解决方案也是可能的:
not set(listA) - set(listB)
以上陈述:如果第一组中没有第二组中没有的元素,那么条件成立(抱歉双重否定!)
答案 2 :(得分:0)
只需遍历列表,然后使用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”regexps:
,这只会变为interessant>>> llist = [r"^.+foo$", r"^bar.*$"]
>>> rlist = ["foozzz", "foobar"]
>>> all(re.match(left, right) for left in llist for right in rlist)
False