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

8

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

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

如何返回

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

我一直在研究列表推导式,类似以下的操作:

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

但是我似乎无法使其工作。我是否走在正确的轨道上?

3个回答

12
你几乎正确了,使用 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']

太棒了,这个方法非常有效。感谢您的快速回复! - White Fish

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

首先,我会构建一个年份的set,以实现O(1)的查找时间。1

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

现在,只保留以years元素结尾的A中的元素。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接