匹配基于python中另一个列表的列表元素,其中一个列表的元素是另一个列表的元素的子串

时间:2016-03-29 15:51:59

标签: python

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf', 'abcd755_mnopqr_20160110_164562.frf'  ]
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']

我有列表A和列表B.列表A有时可能缺少一个或两个元素。基于此,我需要通过维护相同的顺序来创建列表B中包含元素的列表C.

我一直无法找到解决方案。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf']
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']
listC = []

for b in listB:
    if any(a.startswith(b) for a in listA):
        listC.append(b)

print listC

输出['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_']

您没有指定listB中的元素是否需要listA中的元素,因此如果您想要另一种方式,请在not之前添加any

这是一个简单的二次解决方案,如果你有很多元素,你需要更高效的

答案 1 :(得分:1)

使用listcomp,您可以说:

listC = [b for b in listB if any(b in a for a in listA)]

有关

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf']
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']

打印

['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_']