2

我对 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

4

3 回答 3

3

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.

于 2013-06-24T20:24:17.307 回答
2

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

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

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

 not set(listA) - set(listB)

上述状态:如果第一个集合中没有第二个集合中不存在的元素,则条件成立(对不起双重否定!)

于 2013-06-24T20:33:25.540 回答
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”正则表达式时,这才变得有趣:

>>> llist = [r"^.+foo$", r"^bar.*$"]
>>> rlist = ["foozzz", "foobar"]
>>> all(re.match(left, right) for left in llist for right in rlist)
False
于 2013-06-24T20:42:09.520 回答