我很难找到在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()
或其他一些正则表达式类型的解决方案更清洁。
答案 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)]