我对 Python 相当陌生。
我有两个清单
列表 A [a, b, c]
列表 B [c,d,e,f,g,h]
我想重新匹配(或重新搜索)列表 B 中的列表 A 变量。如果列表 B 中不存在列表 A 中的任何变量,它应该返回 false。
在上面的列表中,它应该返回 false。
我可以尝试如下循环吗?
对于 listA 中的 x:
如果 re.match(listB, x)
返回 false
我对 Python 相当陌生。
我有两个清单
列表 A [a, b, c]
列表 B [c,d,e,f,g,h]
我想重新匹配(或重新搜索)列表 B 中的列表 A 变量。如果列表 B 中不存在列表 A 中的任何变量,它应该返回 false。
在上面的列表中,它应该返回 false。
我可以尝试如下循环吗?
对于 listA 中的 x:
如果 re.match(listB, x)
返回 false
You can use all
:
>>> lis1 = ['a', 'b', 'c']
>>> lis2 = ['c','d','e','f','g','h']
>>> all(x in lis2 for x in lis1)
False
If lis2
is huge convert it to a set
first, as sets provide O(1)
lookup:
>>> se = set(lis2)
>>> all(x in se for x in lis1)
False
Regular expressions don't work on lists.
这听起来像是集合的工作,而不是正则表达式:
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