簡體   English   中英

如何比較兩個列表以保持匹配的子串?

[英]How to compare two lists to keep matching substrings?

我可以描述它,我有兩個字符串列表,我想返回列表A中包含列表B中任何字符串的所有結果。以下是詳細信息:

A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
B = ['2000', '2001']

我怎么回來

C = ['dataFile2000', 'dataFile2001']?

我一直在研究列表理解,做下面的事情

C=[x for x in A if B in A] 

但我似乎無法使其發揮作用。 我是在正確的軌道上嗎?

你很親密,使用任何

C=[x for x in A if any(b in x for b in B)]

更詳細:

A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
B = ['2000', '2001']

C = [x for x in A if any(b in x for b in B)]

print(C)

產量

['dataFile2000', 'dataFile2001']

您可以使用any()來檢查列表B任何元素是否在x中:

A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']

B = ['2000', '2001'] 

c = [x for x in A if any(k in x for k in B)]

print(c)

輸出:

['dataFile2000', 'dataFile2001']

首先,我將為O(1)查找時間構建一set年份。 1

>>> A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
>>> B = ['2000', '2001']
>>> 
>>> years = set(B)

現在,僅保留的元素A ,隨着元素結束years

>>> [file for file in A if file[-4:] in years]
>>> ['dataFile2000', 'dataFile2001']

1如果您有非常小的列表(兩個元素肯定有資格)保留列表。 集合具有O(1)查找,但散列仍然引入開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM