如何比较两个列表以保持匹配的子字符串?

时间:2018-11-02 18:03:32

标签: python list list-comprehension

尽我所能描述,我有两个字符串列表,我想返回列表A中包含列表B中任何字符串的所有结果。详细信息:

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

如何退货

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

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

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

但我似乎无法使其正常运行。我在正确的轨道上吗?

3 个答案:

答案 0 :(得分:4)

您已经接近,使用any

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']

答案 1 :(得分:2)

您可以使用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']

答案 2 :(得分:2)

首先,我将为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)查找,但是散列仍然会带来开销。