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

Python 如何比较两个列表以保持匹配的子字符串?,python,list,list-comprehension,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] 但我似乎不能让它工作。我

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

A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
B = ['2000', '2001']
我怎么回去

C = ['dataFile2000', 'dataFile2001']?
我一直在研究列表的理解,做了如下的事情

C=[x for x in A if B in A] 
但我似乎不能让它工作。我在正确的轨道上吗?

如果您很接近,请使用:

更详细的信息:

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']
您可以使用检查列表
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)查找时间构建一个
集合

现在,只保留以
元素结尾的
元素

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

1如果您有非常小的列表(两个元素肯定符合条件),请保留这些列表。集合有O(1)查找,但哈希仍然会引入开销。

太棒了,这就像一个魅力。谢谢你的快速回复!
>>> A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
>>> B = ['2000', '2001']
>>> 
>>> years = set(B)
>>> [file for file in A if file[-4:] in years]
>>> ['dataFile2000', 'dataFile2001']