簡體   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