搜索列表项与另一个列表项子集项

时间:2013-12-05 17:54:37

标签: python

我很难找到在2个列表上进行搜索的最佳方法。我在这里探讨了许多帖子,建议使用像any()all()或正则表达式这样的东西...我现在确实有它的功能,但是我经常使用这种类型的搜索,我真的很想做得对。

SearchList = ['blah-1.2.3.tar.gz', 'blah-1.2.4.tar.gz', 'blah-1.2.5.tar.gz']
BaseList = ['blah-1.2.3', 'blah-1.2.4']

我想在BaseList中搜索'1.2.3'项目中的'1.2.4''1.2.5'SearchList。我一直在for内使用for循环,但我希望使用pythons list comprehension / generator表达式和any()或其他一些正则表达式类型的解决方案更清洁。

2 个答案:

答案 0 :(得分:4)

你可以这样做:

[a for a in SearchList if a[:-7] in BaseList]

a [: - 7]会在最后删除.tar.gz,其余的是基本列表理解。它将返回SearchList中与BaseList中的元素对应的元素列表。

答案 1 :(得分:1)

或者,利用str.startswith接受元组参数

的事实
t = tuple(BaseList)
[x for x in SearchList if x.startswith(t)]