[英]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.