尽我所能描述,我有两个字符串列表,我想返回列表A中包含列表B中任何字符串的所有结果。详细信息:
A = ['dataFile1999', 'dataFile2000', 'dataFile2001', 'dataFile2002']
B = ['2000', '2001']
如何退货
C = ['dataFile2000', 'dataFile2001']?
我一直在研究列表理解,做下面的事情
C=[x for x in A if B in A]
但我似乎无法使其正常运行。我在正确的轨道上吗?
答案 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)查找,但是散列仍然会带来开销。