我有一个名为strList
的字符串列表,其中包含大约800,000-2,200,000
个元素。每个元素包含大约100
个字符。我有另一个名为findStrs
的字符串列表,它通常包含少于5
个元素(5到10个字符的字符串)。我想选择包含strList
中所有元素的findStrs
元素。我怎样才能在Python中有效地做到这一点?这是我如何做到这一点,但我想知道是否有更有效的解决方案使用列表理解来做到这一点:
finalStrList = []
for strr in strList:
temp = []
for findStr in findStrs:
if findStr in strr:
temp.append(findStr)
if len(temp) == len(findStrs):
finalStrList.append(str)
print(finalStrList)
我尝试设计一个基于列表理解的方法,但不出意外,它不起作用:
[strr for strr in strList if [findStr in strr for findStr in findStrs]]
答案 0 :(得分:1)
作为评论部分中提到的juanpa.arrivillaga,我可以使用以下基于列表理解的解决方案轻松完成我想做的事情:
[s for s in strList if all([x in s for x in findStrs])]
答案 1 :(得分:0)
如果匹配率不是很高,我们可以减少时间复杂度。
finalStrList = []
for strr in strList:
flag = True
for findStr in findStrs:
if findStr not in strr:
flag = False
break
if flag:
finalStrList.append(str)
print(finalStrList)